尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

反码补码学习笔记

反码补码学习笔记
📅 发布时间:2026/6/19 1:08:50

反码、补码与 Java byte 学习笔记

本笔记记录本次学习重点:二进制、原码、反码、补码、二进制加法、8 位补码、Java byte 溢出与 byte 运算规则。


一、先会看二进制

1. 4 位二进制的权重

4 位二进制从右往左,每一位分别代表:

8 4 2 1

例如:

0010

对齐看:

二进制:0 0 1 0
权重: 8 4 2 1

只有 2 这一位是 1,所以:

0010 = 2

再看几个:

0001 = 1
0010 = 2
0011 = 2 + 1 = 3
0100 = 4
0101 = 4 + 1 = 5
0110 = 4 + 2 = 6
0111 = 4 + 2 + 1 = 7

记忆方法:

看 1 在哪个位置,把对应权重加起来。

二、原码

原码是最符合人类直觉的表示方式。

规则:

最高位表示符号:
0 = 正数
1 = 负数
​
后面的位表示数值大小。

以 4 位为例:

0101 = +5
1101 = -5

拆开看:

0101 = 0 101 = +5
1101 = 1 101 = -5

三、反码

规则:

正数的反码 = 原码不变

负数的反码 = 符号位不变,后面取反

取反的意思:

0 变 1
1 变 0

例子:-5 的反码

-5 原码:1101

拆开:

1 101

符号位 1 不变,后面 101 取反:

101 -> 010

所以:

-5 反码:1010

常见例子

+3 原码:0011,反码:0011
-3 原码:1011,反码:1100

+5 原码:0101,反码:0101
-5 原码:1101,反码:1010

-1 原码:1001,反码:1110

四、补码

规则:

正数的补码 = 原码不变

负数的补码 = 反码 + 1

也可以记成:

负数补码 = 正数二进制取反 + 1

例子:-5 的 4 位补码

先写 +5:

0101

取反:

1010

加 1:

  1010
+ 0001
------
1011

所以:

-5 的 4 位补码 = 1011

常见 4 位补码

+1 = 0001
-1 = 1111

+2 = 0010
-2 = 1110

+3 = 0011
-3 = 1101

+5 = 0101
-5 = 1011

+6 = 0110
-6 = 1010

+7 = 0111
-7 = 1001

五、二进制加法

二进制是:

满 2 进 1

基础规则:

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10

重点:

1 + 1 = 10

意思是:

本位写 0,向前进 1

还有一个常见情况:

1 + 1 + 1 = 11

意思是:

本位写 1,向前进 1

六、为什么补码好用?

补码的核心作用:

让减法变成加法。

例如:

5 - 5

计算机可以看成:

5 + (-5)

用 4 位补码:

+5 = 0101
-5 = 1011

相加:

  0101
+ 1011
------
1 0000

因为只看 4 位,最前面多出来的 1 丢掉:

0000

所以结果是:

5 + (-5) = 0

再看:

+3 = 0011
-1 = 1111

相加:

  0011
+ 1111
------
1 0010

只保留 4 位:

0010

0010 = 2,所以:

3 + (-1) = 2

七、4 位补码表示范围

4 位补码一共可以表示 16 个数:

0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7

1000 = -8
1001 = -7
1010 = -6
1011 = -5
1100 = -4
1101 = -3
1110 = -2
1111 = -1

所以 4 位补码范围是:

-8 到 7

重点边界:

0111 = 7
1000 = -8
1111 = -1
0000 = 0

八、补码转十进制

判断规则:

最高位是 0:正数,直接算

最高位是 1:负数,取反 + 1,再加负号

例子 1:0010

0010

最高位是 0,直接算:

0010 = 2

例子 2:1011

1011

最高位是 1,说明是负数。

取反:

0100

加 1:

0101

0101 = 5

加负号:

1011 = -5

例子 3:1110

1110

取反:

0001

加 1:

0010

0010 = 2

所以:

1110 = -2

九、8 位补码

Java 里的 byte 就是 8 位补码。

8 位权重:

128 64 32 16 8 4 2 1

例如:

0000 1010

对齐:

二进制:0   0  0  0  1 0 1 0
权重:128 64 32 16 8 4 2 1

有 1 的位置是 8 和 2:

0000 1010 = 8 + 2 = 10

十、8 位负数补码

例子:-5

先写 +5:

0000 0101

取反:

1111 1010

加 1:

  1111 1010
+ 0000 0001
------------
1111 1011

所以:

-5 的 8 位补码 = 1111 1011

常见 8 位补码

-1  = 1111 1111
-2 = 1111 1110
-3 = 1111 1101
-5 = 1111 1011
-6 = 1111 1010
-10 = 1111 0110

十一、8 位补码转十进制

规则仍然是:

最高位是 0:正数,直接算

最高位是 1:负数,取反 + 1,再加负号

例子 1:1111 1011

1111 1011

最高位是 1,是负数。

取反:

0000 0100

加 1:

0000 0101

0000 0101 = 5

所以:

1111 1011 = -5

例子 2:1111 0110

1111 0110

取反:

0000 1001

加 1:

0000 1010

0000 1010 = 10

所以:

1111 0110 = -10

十二、Java byte 的范围

Java 中:

byte b;

byte 是 8 位补码。

8 位一共有 256 种组合:

0000 0000 到 1111 1111

其中:

0000 0000 到 0111 1111 表示 0 到 127
1000 0000 到 1111 1111 表示 -128 到 -1

所以 byte 范围是:

-128 到 127

几个关键值:

0000 0000 = 0
0111 1111 = 127
1000 0000 = -128
1111 1111 = -1
1000 0001 = -127

十三、byte 溢出

例子 1:127++

byte b = 127;
b++;
System.out.println(b);

结果:

-128

原因:

127 = 0111 1111

加 1:

  0111 1111
+ 0000 0001
------------
1000 0000

而:

1000 0000 = -128

所以:

127 + 1 = -128

例子 2:-128--

byte b = -128;
b--;
System.out.println(b);

结果:

127

原因:

-128 = 1000 0000

减 1 后绕回:

0111 1111 = 127

十四、Java 中 byte 运算会自动提升为 int

重点规则:

byte、short、char 参与运算时,会自动提升为 int。

所以:

byte a = 1;
byte b = 2;
byte c = a + b;

这段代码会编译报错。

原因:

a + b 的结果类型是 int
byte c 接不住 int

正确写法:

byte a = 1;
byte b = 2;
byte c = (byte)(a + b);

或者:

byte a = 1;
byte b = 2;
int c = a + b;

总结:

byte c = a + b;          // 错,a+b 是 int
int c = a + b; // 对
byte c = (byte)(a + b); // 对,强制转成 byte

十五、强转 byte 可能溢出

例如:

byte a = 100;
byte b = 100;
byte c = (byte)(a + b);
System.out.println(c);

先算:

100 + 100 = 200

但是 byte 范围是:

-128 到 127

200 超出了 byte 范围。

200 的 8 位二进制是:

1100 1000

最高位是 1,按 byte 补码解释是负数。

反推:

1100 1000
↓ 取反
0011 0111
↓ +1
0011 1000

0011 1000 = 32 + 16 + 8 = 56

所以:

1100 1000 = -56

因此:

byte c = (byte)(100 + 100);
System.out.println(c);

输出:

-56

注意区分:

int c = a + b;          // 结果是 200

byte c = (byte)(a + b); // 结果是 -56

十六、本次学习口诀

正数:
原码 = 反码 = 补码

负数:
原码:符号位为 1,后面是数值
反码:符号位不变,后面取反
补码:反码 + 1

更实用的记法:

负数补码 = 正数二进制取反 + 1

补码转十进制:

0 开头:直接算
1 开头:取反 + 1,再加负号

Java byte:

byte 是 8 位补码
范围是 -128 到 127
127 + 1 = -128
-128 - 1 = 127
byte、short、char 运算会提升为 int

十七、建议后续复习顺序

  1. 先练 4 位二进制正数:

    0010 = ?
    0101 = ?
    0111 = ?
  2. 再练 4 位负数补码:

    1111 = ?
    1110 = ?
    1011 = ?
  3. 再练十进制转补码:

    -1 = ?
    -2 = ?
    -5 = ?
  4. 再练 8 位 byte:

    1111 1111 = ?
    1111 1011 = ?
    1000 0000 = ?
    0111 1111 = ?
  5. 最后练 Java 代码:

    byte b = 127;
    b++;

    byte b = -128;
    b--;

    byte a = 100;
    byte b = 100;
    byte c = (byte)(a + b);

十八、最终掌握目标

学完这一部分,你应该能做到:

1. 会看二进制正数。
2. 知道原码、反码、补码的区别。
3. 会把负数转成补码。
4. 会把补码反推成十进制。
5. 会做简单二进制加法。
6. 理解 Java byte 为什么是 -128 到 127。
7. 理解 byte 溢出。
8. 知道 byte 运算为什么会自动提升成 int。

相关新闻

  • ATM网络OAM机制深度解析:从AIS/RDI信元到硬件性能监控实战
  • 深入解析NXP MCU Bootloader与blhost工具:从原理到高级应用实践
  • 医疗AI落地两大硬坎:临床信任断裂与数据合规失焦

最新新闻

  • Citra图形设置终极指南:从模糊到高清的完整解决方案
  • 2026最新领英(LinkedIn)账户合规与风控申诉全指南:从算法机制到效率恢复实操
  • 完全掌握Blender资源宝典:从入门到实战的5大核心模块深度解析
  • C++多线程编程入门教程(非常详细)
  • 停止手动输入Prompt!AI编码圈的“循环工程”正在颠覆写代码的方式
  • TrafficMonitor插件:终极指南,让你的Windows任务栏变身全能信息中心

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号