计算机基础知识1
计算机原码/反码/补码
二进制在计算机中存储的格式。
原码
最高位为符号位,以人来理解二进制的方式
原码表示
1原码:0000 0001
-1原码:1000 0001
1字节表示范围[1111 1111, 0111 1111] –> [127, -127]
反码
正数的反码是本身
负数的反码是符号位在原码的基础上,符号位不变,其它位取反
反码表示
1原码:0000 0001 == 1反码:0000 0001
-1原码:1000 0001 == -1反码:1111 1110
补码
正数的补码就是其本身
负数的补码是在反码的基础上+1
1原码:0000 0001 == 1反码:0000 0001 == 1补码:0000 0001
-1原码:1000 0001 == -1反码:1111 1110 == -1补码:1111 1111
用补码表示原因
将符号位带入计算机的二进制计算
例子:1 - 1 = 0
原码计算
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 000 0000
:最高位表示符号位,低位是000 0000,-1-127=-128(补码:1000 0000)
8位二进制,使用原码或反码表示的范围为[-127, +127],而使用补码表示的范围为[-128, 127]
常用到的32位int类型, 可以表示范围是: [-2^31, 2^31-1]