基础概念(存储单位):
bit:二进制的一位代表一个bit(比特)。它的简写为小写字母 “b”
Byte:一个英文字符通常是一个字节,一个字节代表4个bit。它的简写为大写字母 “B”
原码,反码,补码的长度是字型数据。如果他的字形数据占8位,原码,反码,补码的长度就是8。(不重要)
开始正文
暂定为长度为16个比特
符号位为长度最左侧,0为正数,1为负数
原码
原码即 整数转化为二进制的表现形式
例:1的二进制是1,2的二进制是10
1的原码[0000 0000 0000 0001]
2的原码[0000 0000 0000 0010]
-2的原码[1000 0000 0000 0010]
反码
正数的反码即原码 负数的反码即原码 “除去符号位以外” 其他位置取反
例:
1的原码[0000 0000 0000 0001]
1的反码[0000 0000 0000 0001]
-1的原码[1000 0000 0000 0001]
-1的反码[1111 1111 1111 1110]
补码
正数的补码即原码 负数的补码即反码加一
-1的反码[1111 1111 1111 1110]
-1的补码[1111 1111 1111 1111]
在计算机内存中,整数一律采用补码的形式来存储。这意味着,当读取整数时还要采用逆向的转换,也就是将补码转换为原码。将补码转换为原码也很简单:先减去 1,再将数值位取反即可。
计算机计算加减法时
1+1
=[0000 0000 0000 0001]补 + [0000 0000 0000 0001]补
=[0000 0000 0000 0010]补
=[0000 0000 0000 0010]反
=[0000 0000 0000 0010]原
=2
1-1
=1+(-1)
=[0000 0000 0000 0001]补 + [1111 1111 1111 1111]补
=[0000 0000 0000 0000]补
=[0000 0000 0000 0000]反
=[0000 0000 0000 0000]原
=0
为什么要用补码计算,先看下边的展示
+0原码: [0000 0000 0000 0000] -0原码: [1000 0000 0000 0000]
+0反码: [0000 0000 0000 0000] -0反码: [1111 1111 1111 1111]
+0补码: [0000 0000 0000 0000] -0补码: [0000 0000 0000 0000]
由上可见,+0和-0的原码和反码表示并不相等,这是不对的。因为 -0 = +0
所以,你懂了的吧