Java 原码、反码、补码
原码
什么是原码,怎么知道原码?
还记得前面数据类型那一章里有一张图片吗
比如十进制的 5
byte b_num = 5;
short s_num = 5;
int i_number = 5;
这就是上面三种类型,对应的原码。
原码就是将数字转换成对应的二进制,再将前面剩余的所有空间用 0
填充
什么是符号位
符号就是二进制的第一位如下图
符号位是 0
代表正数
符号位是 1
代表负数
所以,正数的原码是他本身的对应的二进制
负数的原码是他本身的对应的二进制,但符号位是 1
反码
什么是反码
首先,反码分两种情况
- 正数:正数的反码就是正数的原码(也就是正数本身对应的二进制)
- 负数:负数的反码是它的原码符号位不变其他位取反(即0 -> 1 1 -> 0)
如 -5
的反码
什么是补码
补码也是分两种情况
- 正数:正数的补码还是正数本身
- 负数:负数的补码就是它的反码
+1
[这里需要注意 将负数的反码
转成补码
的时候是反码+1
将负数的补码
转成反码
是补码-1
]
如 -5
的反码:
需要先得到 -5
的 原码
,再将 原码
转成 反码
,最后再将 反码
转成 补码
负数补码
获取顺序 = 原码
==> 反码
==> 补码
如下图:
反码、补码的作用
反码
解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规则;补码
是用于计算机内部运算的(即:计算机都是以补码的方式来运算的)了解:解决负数加法运算正负零问题,弥补了反码的不足
计算机对位运算的过程
- 计算机会先把
原码
转换成反码
- 再将
反码
转成补码
- 然后再以
补码
进行运算 - 运算完成后再将
补码
转换成反码
- 再将
反码
转换成原码
这里 源码
=> 补码
,和 补码
=> 原码
的顺序是刚好倒过来的
原码
=>补码
原码
=>反码
=>补码
(需要注意的是反码
转补码
是反码+1
,如果这个不清楚先别往下看,回去看上面 什么是补码)
补码
=>原码
补码
=>反码
=>原码
(需要注意的是补码
转反码
是补码-1
)
总结
- 二进制的最高位是符号位:
0
代表正数、1
代表负数。 - 正数的
原码
、反码
、补码
都是它本身。 - 负数的
原码
是数字本身对应的二进制,但是符号位是1
。 - 负数的
反码
是原码
的符号位不变,其他位反转(即0=>1 1=>0)。 - 负数的
补码
是反码
+1
0
的反码、补码都是0
- Java 中所有的数字都是有符号的
- 在计算机运算时,都是以
补码
的方式来运算的 - 要看实际运算结果,需要看
原码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具