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

相关推荐
二十七剑1 小时前
jvm中各个参数的理解
java·jvm
m0_748235952 小时前
Python大数据可视化:基于Python的王者荣耀战队的数据分析系统设计与实现_flask+hadoop+spider
hadoop·python·flask
life_time_2 小时前
C语言(22)
c语言·开发语言
东阳马生架构2 小时前
JUC并发—9.并发安全集合四
java·juc并发·并发安全的集合
Dyan_csdn2 小时前
【Python项目】基于Python的Web漏洞挖掘系统
网络·python·安全·web安全
Minner-Scrapy2 小时前
DApp 开发入门指南
开发语言·python·web app
计算机小白一个3 小时前
蓝桥杯 Java B 组之岛屿数量、二叉树路径和(区分DFS与回溯)
java·数据结构·算法·蓝桥杯
孤雪心殇3 小时前
简单易懂,解析Go语言中的Map
开发语言·数据结构·后端·golang·go
&小刘要学习&3 小时前
anaconda不显示jupyter了?
python·jupyter