原码、反码、补码
1. 有符号数 正数:原码、反码和补码相同
整数 负数:原码、反码和补码不同,要进行计算
2. 无符号数 原码、反码和补码相同
计算规则:
原码:直接将二进制按照正负数的形式翻译成二进制就可以。
反码:将原码的符号位不变,其他位依次按位取反就可以得到了。
补码:反码 +1 就得到补码。
整形在内存中的存储
变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。
那接下来我们谈谈数据在所开辟内存中到底是如何存储的?
int a = 20;//4个字节32bit
//00000000000000000000000000010100原码
//00000000000000000000000000010100反码
//00000000000000000000000000010100补码
//内存展书的是16进制
//0x00000014
//0x表示16进制
int b = -10;//4个字节32bit
//1000 0000 0000 0000 0000 0000 0000 1010原码
//1111 1111 1111 1111 1111 1111 1111 0101反码
//1111 1111 1111 1111 1111 1111 1111 0110补码
//0xFFFFFFF6
//0x表示16进制
对于整形来说:整形存放内存中其实存放的是补码。
为什么使用补码?
原因在于,使用补码,可以将符号位和数值域统一处理; 同
时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需
要额外的硬件电路。一切运算都可以通过加法实现
例子:
1+(-1)
00000000000000000000000000000001(1的补码)
10000000000000000000000000000001(-1的原码)
11111111111111111111111111111110(-1的反码)
11111111111111111111111111111111(-1的补码)
100000000000000000000000000000000(1+(-1)的补码)
00000000000000000000000000000000(1+(-1)的补码:去掉前面超出范围的,得到0的补码)