目录
原码、反码、补码
计算机中的整数由3种二进制表示方法:原码、反码、补码。
而整形又分为无符号数(unsigned int)和有符号数(signed int)。有符号数有符号位和数值位,符号位用1表示负,0表示正;而无符号数没有符号位,只有数值位。
一个整形在打印输出,也就是我们所看到的是它的原码,而该整形在内存中存储的是它的补码,在整形表达式中相加减的也是它的补码。
需要注意的是正整数的三码合一,也就是说正整数的原码等于反码等于补码。
-
原码
直接将数值按照正负的形式转化成二进制就是原码。
-
反码
数值的原码符号位不变,其余各位按位取反(是1就变成0,是0就变成1)得到补码。
-
补码
反码+1得到补码。
举例
10,10是整形(int),所占大小是4个字节,而一个字节是8个比特位,所以10的二进制位就有32个比特位,因为10是正整数,所以符号位是0,符号位位于二进制序列的首位
10的原码:00000000 00000000 00000000 00001010
10的反码:01111111 11111111 11111111 11110101
10的补码:01111111 11111111 11111111 11110110
-
补充(补码转原码)
补码符号位不变,其余位按位取反,再+1得到原码。
大小端字节序存储模式
大端字节序存储模式:数据的低位存储在内存的高地址处,数据的高位存储在内存的低地址处。
小端字节序存储模式:数据的低位存储在内存的低地址处,数据的高位存储在内存的高地址处。
内存中是以字节为存储单元的。
-
举例
a中存储的是一个16进制的数值,可以看到44是低位,而11是高位。
可以看到44存储在了低位,11存储在了高位,44对应0C,33对应0D,22对应0E,11对应0F,因为我们是存储的十六进制的数值,而一个十六进制位对应4个二进制位,一个二进制位又对应一个比特位,所以两个十六进制位刚好就是一个字节,而显而易见如上图所示的存储模式就是小端字节序存储模式。