Java 原码、反码、补码

原码

什么是原码,怎么知道原码?

还记得前面数据类型那一章里有一张图片吗

image-20220403215609538

比如十进制的 5

byte b_num = 5;
short s_num = 5;
int i_number = 5;

这就是上面三种类型,对应的原码。
image-20220408031229031

原码就是将数字转换成对应的二进制,再将前面剩余的所有空间用 0 填充

什么是符号位

符号就是二进制的第一位如下图

image-20220408032732853

符号位是 0 代表正数

符号位是 1 代表负数

所以,正数的原码是他本身的对应的二进制

负数的原码是他本身的对应的二进制,但符号位是 1

反码

什么是反码

首先,反码分两种情况

  1. 正数:正数的反码就是正数的原码(也就是正数本身对应的二进制)
  2. 负数:负数的反码是它的原码符号位不变其他位取反(即0 -> 1 1 -> 0)

-5 的反码

image-20220408135200429

什么是补码

补码也是分两种情况

  1. 正数:正数的补码还是正数本身
  2. 负数:负数的补码就是它的反码 +1 [这里需要注意 将负数的反码转成补码的时候是 反码+1 将负数的补码转成反码补码-1]

-5 的反码:

需要先得到 -5原码 ,再将 原码 转成 反码 ,最后再将 反码 转成 补码

负数补码 获取顺序 = 原码 ==> 反码 ==> 补码

如下图:

image-20220408150535358

反码、补码的作用

  1. 反码解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规则;
  2. 补码是用于计算机内部运算的(即:计算机都是以补码的方式来运算的)了解:解决负数加法运算正负零问题,弥补了反码的不足

计算机对位运算的过程

  1. 计算机会先把原码转换成反码
  2. 再将 反码 转成 补码
  3. 然后再以补码进行运算
  4. 运算完成后再将补码转换成 反码
  5. 再将 反码 转换成 原码

这里 源码 => 补码,和 补码 => 原码 的顺序是刚好倒过来的

  • 原码 => 补码
    • 原码 => 反码 => 补码 (需要注意的是 反码补码反码+1,如果这个不清楚先别往下看,回去看上面 什么是补码
  • 补码 => 原码
    • 补码 => 反码 => 原码 (需要注意的是 补码反码补码-1

总结

  1. 二进制的最高位是符号位:0 代表正数、1代表负数。
  2. 正数的原码反码补码都是它本身。
  3. 负数的原码 是数字本身对应的二进制,但是符号位是 1
  4. 负数的反码原码的符号位不变,其他位反转(即0=>1 1=>0)。
  5. 负数的补码反码 +1
  6. 0 的反码、补码都是 0
  7. Java 中所有的数字都是有符号的
  8. 在计算机运算时,都是以补码的方式来运算的
  9. 要看实际运算结果,需要看原码
posted @   假文艺青年。  阅读(434)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示