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的原、反、补码。

相关推荐
Coder_Boy_1 分钟前
业务导向型技术日志首日记录(业务中使用的技术栈)
java·驱动开发·微服务
程序员zgh28 分钟前
C++ 互斥锁、读写锁、原子操作、条件变量
c语言·开发语言·jvm·c++
1916zz30 分钟前
Extreme programing 方利喆 _ 江贤晟
python
长安牧笛31 分钟前
智能鞋柜—脚气终结者,内置温湿度传感器和紫外线灯,晚上回家,把鞋放进去,自动检测湿度,湿度超标就启动烘干+紫外线杀菌,第二天穿鞋干燥无异味。
python
小灰灰搞电子43 分钟前
Qt 重写QRadioButton实现动态radioButton源码分享
开发语言·qt·命令模式
weixin_457760001 小时前
PIL库将图片位深度是1、8、32统一转换为24的方法
python
by__csdn1 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
喵了meme1 小时前
C语言实战5
c语言·开发语言
盖世英雄酱581361 小时前
springboot 项目 从jdk 8 升级到jdk21 会面临哪些问题
java·后端
济南壹软网络科技有限公司1 小时前
企业级盲盒系统:Java高并发架构在多元化抽奖电商中的设计与实践
java·架构·开源源码·盲盒源码·盲盒h5·盲盒app