Java基础之原反补码

原反补码

学习这个知识点之前,我们先来看一个题目:写出10的二进制形式

答案及解读:

0b 0 0(23个) 0000 1010

​ 10对应的类型为int,在计算机底层占4字节,需要32个比特位表示

​ 其中最高位为符号位,0表示正数,1表示负数

​ 剩下的31位,其中23位都为0,低8位为0000 1010 = 8 + 2 = 10

​ 连到一起,结果为正整数10

思考:-10的二进制形式如何表示?

​ 如果要表示负整数的二进制形式,则必须学习原码、反码、补码。

1)原码

​ 就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小

java 复制代码
 10的原码:0 0(23) 0000 1010
-10的原码:1 0(23) 0000 1010

2)反码

  • 正数的反码与其原码相同

  • 负数的反码,在原码的基础上,保留符号位,其他位逐位取反

java 复制代码
 10的反码:	 跟10的原码相同       0 0(23) 0000 1010
-10的反码:	 拿到-10的原码, 		1 0(23) 0000 1010
			保留符号位其他位取反  1 1(23) 1111 0101 

3)补码

  • 正数的补码与其原码相同

  • 负数的补码是在其反码的末位加1

java 复制代码
 10的补码:	 跟10的原码相同       0 0(23) 0000 1010
-10的补码:	 拿到-10的反码, 		1 1(23) 1111 0101
			在反码基础上加1  	  1 1(23) 1111 0110 

特别注意:数据在计算机底层进行存储或运算,以补码方式进行!

案例展示:

java 复制代码
模拟计算机底层进行运算:-10 + 10;
计算机底层通过补码进行运算,先获取-10补码:1 1(23) 1111 0110
    							   +
    				   再获取 10补码:0 0(23) 0000 1010
    							   =
    				   结果:		1【0 0(23) 0000 0000】
结果分析:两个int类型数据相加后结果值类型仍旧是int,其中int类型表示范围为4字节32个比特位,所以上述结果中第33位的那个1被自动抛弃,只保留低32位数值,0 0(23) 0000 0000,即 0。
所以:-10 + 10 == 0

课堂练习:

​ 请写出-123的原、反、补码。

相关推荐
皮皮林5515 小时前
拒绝写重复代码,试试这套开源的 SpringBoot 组件,效率翻倍~
java·spring boot
顺风尿一寸9 小时前
从 Java NIO poll 到 Linux 内核 poll:一次系统调用的完整旅程
java
Flittly9 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(3)TodoWrite (待办写入)
python·agent
程途知微9 小时前
JVM运行时数据区各区域作用与溢出原理
java
华仔啊11 小时前
为啥不用 MP 的 saveOrUpdateBatch?MySQL 一条 SQL 批量增改才是最优解
java·后端
千寻girling13 小时前
一份不可多得的 《 Django 》 零基础入门教程
后端·python·面试
xiaoye201813 小时前
Lettuce连接模型、命令执行、Pipeline 浅析
java
databook16 小时前
探索视觉的边界:用 Manim 重现有趣的知觉错觉
python·动效
beata17 小时前
Java基础-18:Java开发中的常用设计模式:深入解析与实战应用
java·后端
Seven9717 小时前
剑指offer-81、⼆叉搜索树的最近公共祖先
java