0和1表示两种状态,现实中好实现,比如用1、电路关、闭 2、电位高、低 来实现。
原码、反码、补码。
反码:正数的反码与原码相同;负数的反码:符号位为1,其余各位对原码依次取反。注意+0的反码:0000 0000B;-0的反码:1111 1111B
补码:正数的补码与原码相同;负数的补码:反码 + 1 0的补码只有0000 0000B
计算机为何用补码存储数值?
加法比减法容易实现(进位比借位容易),所以计算机统一用加不用减。
示例:计算8 - 3
1、若用原码: 0000 1000B + 1000 0011B = 1000 1011B即-11
2、若用反码: 0000 1000B + 1111 1100B = 1 0000 0100B 去除溢出的一位后:0000 0100B 即4 比实际值小1 于是将反码+1后即为正确结果,称其为补码。
另外java中数值最高位为符号位,两数值相加,若最高位有进位,则舍弃。(超出表示范围)
常见疑惑:
1、为什么-1在计算机中用1111 1111B表示?
-1的原码:1000 0001B
-1的反码:1111 1110B
-1的补码:1111 1111B
2、为什么byte类型的-127用1000 0001B表示而-128用1000 0000B表示?
-127的原码:1111 1111B
-127的反码:1000 0000B
-127的补码:1000 0000B
-128+127=-1
-128+0111 1111B = 1111 1111B(全为补码形式)
由上推出。128的补码(即在计算机中的表示形式)为:1000 0000B
注意:计算时不要乱,不能用原码和补码进行运算。
同种表示方式之间可以运算。