一文详解码、反码、补码
扫描二维码
随时随地手机看文章
作者:ziqiu.zhang
链接:https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
一、机器数和真值
1、机器数
2、真值
因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
二、原码, 反码, 补码的基础概念和计算方法.
1、原码
[+1] 原 = 0000 0001 [-1] 原 = 1000 0001
[1111 1111 , 0111 1111]
[-127 , 127]
2、反码
[+1] = [00000001] 原 = [00000001] 反 [-1] = [10000001] 原 = [11111110] 反
3、补码
[+1] = [00000001] 原 = [00000001] 反 = [00000001] 补 [-1] = [10000001] 原 = [11111110] 反 = [11111111] 补
三、为何要使用原码, 反码和补码
[+1] = [00000001] 原 = [00000001] 反 = [00000001] 补
[-1] = [10000001] 原 = [11111110] 反 = [11111111] 补
1 - 1 = 1 + (-1) = [00000001] 原 + [10000001] 原 = [10000010] 原 = -2
1 - 1 = 1 + (-1) = [0000 0001] 原 + [1000 0001] 原= [0000 0001] 反 + [1111 1110] 反 = [1111 1111] 反 = [1000 0000] 原 = -0
1-1 = 1 + (-1) = [0000 0001] 原 + [1000 0001] 原 = [0000 0001] 补 + [1111 1111] 补 = [0000 0000] 补=[0000 0000] 原
(-1) + (-127) = [1000 0001] 原 + [1111 1111] 原 = [1111 1111] 补 + [1000 0001] 补 = [1000 0000] 补
四、原码, 反码, 补码 再深入
1. 往回拨2个小时: 6 - 2 = 4 2. 往前拨10个小时: (6 + 10) mod 12 = 4 3. 往前拨10+12=22个小时: (6+22) mod 12 =4
同余的概念
4 mod 12 = 4 16 mod 12 = 4 28 mod 12 = 4
负数取模
x mod y = x - y L x / y J
-3 mod 2 = -3 - 2xL -3/2 J = -3 - 2xL-1.5J = -3 - 2x(-2) = -3 + 4 = 1
(-2) mod 12 = 12-2=10 (-4) mod 12 = 12-4 = 8 (-5) mod 12 = 12 - 5 = 7
开始证明
回拨2小时 = 前拨10小时 回拨4小时 = 前拨8小时 回拨5小时= 前拨7小时
(-2) mod 12 = 10 10 mod 12 = 10
(-4) mod 12 = 8 8 mod 12 = 8
a ≡ a (mod m)
如果a ≡ b (mod m),c ≡ d (mod m) 那么: (1)a ± c ≡ b ± d (mod m) (2)a * c ≡ b * d (mod m)
7 ≡ 7 (mod 12) (-2) ≡ 10 (mod 12) 7 -2 ≡ 7 + 10 (mod 12)
2-1=2+(-1) = [0000 0010] 原 + [1000 0001] 原= [0000 0010] 反 + [1111 1110] 反
(-1) mod 127 = 126 126 mod 127 = 126
(-1) ≡ 126 (mod 127) 2-1 ≡ 2+126 (mod 127)
2-1=2+(-1) = [0000 0010] 原 + [1000 0001] 原 = [0000 0010] 补 + [1111 1111] 补
[0111 1111] 原 = 127
(-1) mod 128 = 127 127 mod 128 = 127 2-1 ≡ 2+127 (mod 128)
-END-
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!