原码,反码,补码,有符号数,无符号数 之间的关系【超全总结】
目录【精炼总结】原码|反码|补码、有符号数|无符号数 —— 正反转换、辨析1. 原码、反码、补码 转化方法1.0 前言1.1 正转1.2 反转1.3 实例2. 有符号数、无符号数【难点辨析】2.1 辨析2.2 实例3. 参考资料【精炼总结】原码|反码|补码、有符号数|无符号数 —— 正反转换、辨析这几个东西向来很绕。这里不叙述由来和原理,而是直接总结 原、反、补码的转化方法 和 有无符号数之间的异
·
这几个东西向来很绕。这里不叙述由来和原理,而是直接总结 原、反、补码的正逆转化方法 和 有无符号数之间的辨析。
1. 原码、反码、补码 正逆转化方法
1.0 前言
1.1 正转方法
1.1.1 讲解
| 正数 | 负数 | |
|---|---|---|
| 原码 | (原码) | (原码) |
| 反码 | 等于原码 | 原码除符号位外的位取反 |
| 补码 | 等于原码 | 反码+1 (即等于原码除符号位外取反,然后+1) |
1.1.2 举例
| 正数 | 负数 | |
|---|---|---|
| 原码 | 0110 0011 - - - (原码) | 1110 0011 - - - - - - - - - - - - - – (原码) |
| 反码 | 0110 0011(等于原码) | 1001 1100(原码除符号位外的位取反) |
| 补码 | 0110 0011(等于原码) | 1001 1101 - - - - - - - - - - - – (反码+1) |
1.1.3 注
有符号数的最高位为符号位,其余位为有符号数的值;无符号数所有位都用来表示无符号数的值- 还有另一种计算补码的方法:
原码符号位不变, 数值位从右边数第一个1及其右边的0保持不变,左边按位取反。这种方法如何反过来计算我就暂时不推了。
1.2 反转方法
1.1.1 讲解
那么反过来转化也是一样的道理
| 正数 | 负数 | |
|---|---|---|
| 补码 | (补码) | (补码) |
| 反码 | 等于补码 | 补码-1 |
| 原码 | 等于补码 | 反码除符号位外取反(即等于补码-1,然后除符号位外取反) |
1.1.2 栗子
1.1.3 注
- 这里举例为了方便,使用了8位(又称8-bit、1字节)的数。
- 通常的int类型为32位(4字节)或64位(8字节),有时也会出现16位(2字节)。
- 再次提示:以上讨论的是“有符号数”为正、负的情况。"无符号数"没有原码、反码和补码的概念!
2. 有符号数、无符号数【难点辨析】
2.1 辨析
| 有符号数 | 无符号数 |
|---|---|
| 能表示正数和负数 | 仅表示正数 |
最高位是符号位(符号位:1为负数,0为正数)。其余位按照2进制计算该数的绝对值大小 |
所有位都按照2进制计算大小 |
在机器中(即内存中)用补码表示 |
在机器中(即内存中)直接按2进制存储,不用进行任何变换 |
2.2 实例
举个栗子 —— 以一个内存中8位的机器数为例:
| 有符号数 | 无符号数 | |
|---|---|---|
| 区别 | 视作补码 (翻译成原码,并且除去符号位后,剩下的才可视为二进制数) |
视作一个二进制数 |
翻译为反码 |
1100 0100 - - - - - - - - - - -(补码-1) |
(不适用) |
翻译为原码 |
1011 1011(反码除符号位外取反) |
(不适用) |
| . | . | . |
| 最终结果 | -59 | 187 |
3. 参考资料
更多推荐


所有评论(0)