补码 原码 反码
来源:互联网 发布:东欧现状知乎 编辑:程序博客网 时间:2024/06/05 13:35
原码:在数值前直接加一符号位的表示法
[+7]原= 0 0000111 B
[-7]原= 1 0000111 B
反码 : 正数的反码与原码相同。
负数的反码,符号位为“1”,数值部分按位取反。
[+7]反= 0 0000111 B
[-7]反= 1 1111000 B
补码 : 正数的补码和原码相同
负数的补码则是符号位为“1”。并且,这个“1”既是符号位,也是数值位。数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
[+7]补= 0 0000111 B
[-7]补= 1 1111001 B
在计算机系统中,数值一律用补码来表示和存储。使用补码,可以将符号位和数值域统一处理,同时,加法和减法也可以统一处理。
exp:
20的二进制补码 = 00010100 25的二进制补码 = 00011001
按位取反后: 11101011 按位取反后: 11100110
末尾加 1 后: 11101100 末尾加 1 后: 11100111
-20的二进制补码 = 11101100 -25的二进制补码 = 11100111
按位取反后: 11101011 按位取反后: 11100110
末尾加 1 后: 11101100 末尾加 1 后: 11100111
-20的二进制补码 = 11101100 -25的二进制补码 = 11100111
-20 11101100
+(-25) = + 11100111
-45 111010011
超出的最高位去掉后 = 11010011
-45 的补码刚好是 11010011
20 00010100
+(-25) = + 11100111
-5 11111011
-5 的补码刚好是 11111011
+(-25) = + 11100111
-5 11111011
-5 的补码刚好是 11111011
按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法
-5 的原码 10000101
注意溢出的问题:
byte的取值范围 八位
无符号位 0~255 (因为计算机是从0开始计算的而不是1)
有符号位 -128 ~ +127
0000 0000 = +0
没有 1000 0000 = -0
1000 0000=-128 计算机以补码形式存储 这个“1”既是符号位,也是数值位。
1)(+72)+(+98)=
0 1 0 0 1 0 0 0 B +72
01 1 0 0 0 1 0 B +98
1 0 1 0 1 0 1 0 B
11010110 -86
2)(-83)+(-80)=
1 0 1 0 1 1 0 1 B -83
1 0 1 1 0 0 0 0 B -80
0 1 0 1 1 1 0 1 B +93
0 0
- 原码、反码、补码
- 原码-反码-补码
- 原码、反码、补码
- 原码、反码、补码
- 原码,反码,补码
- 原码、反码、补码
- 原码、反码、补码
- 原码、反码、补码
- 原码、反码、补码
- 原码、反码、补码
- 原码、反码、补码
- 原码补码反码
- 原码、反码、补码
- 原码、反码、补码
- 原码、反码、补码
- 原码 补码 反码
- 原码、反码、补码
- 原码 反码 补码
- 在线笔试-求二叉树中俩个节点的最低共同父节点
- 验证规则
- Universal-Image-Loader从使用到源码分析
- 加班是一把双刃剑
- 阿里云maven仓库配置
- 补码 原码 反码
- Ubuntu开机启动
- 《工业大数据》煎蛋模型
- linux下安装nginx
- SVM的交叉验证和网格收缩
- EasyUI所遇到的坑
- Xcode8的assets问题导致运行iOS8崩溃的解决方案
- 三羊献瑞
- with在js中的用法