原码、反码、补码
背景
在计算机中以二进制对数据进行存储和计算,且是以补码的形式进行,那么原码、反码、补码三者的关系是什么呢?
计算机存储数据时以特定的空间进行存储,如:int占有4字节的空间,byte:1字节;那么因为空间是有限的,则会发生溢出和截断
1111 1111
+0000 0001
——————————
10000 0000
(只取后八位)
原码:
原码即二进制的原始形式,如
byte a = 4;
// a 所对应的原码为 0000 0100
优点:处理正数没问题
缺点:处理负数会出现问题,不能计算负数
符号位:最高位为符号位,0表示正数,1表示负数
因此:正数的补码、反码和原码相同,不变;因为正数用原码处理不会出现问题
但处理负数时却会发生问题:
当以原码计算 -3 + 1 时
1000 0011
+0000 0001
——————————
1000 0100
实际结果应该是 -2;但 1