C/C++中,整型数据是用int来进行定义的, 占4个字节。
最高位为符号位,最高位为0,则为正数;最高位为1,则为负数。
最大值为INT_MAX =
2
31
−
1
2^{31}-1
231−1
二进制表示是:
0111
1111
1111
1111
1111
1111
1111
1111
0111 \ \ 1111\ \ 1111\ \ 1111\ \ 1111\ \ 1111 \ \ 1111 \ \ 1111
0111 1111 1111 1111 1111 1111 1111 1111
十六进制表示为:0x7FFFFFFF
最小值为INT_MIN =
−
2
31
-2^{31}
−231
二进制表示是:
1000
0000
0000
0000
0000
0000
0000
0000
1000\ \ 0000\ \ 0000\ \ 0000\ \ 0000\ \ 0000\ \ 0000\ \ 0000
1000 0000 0000 0000 0000 0000 0000 0000
十六进制表示为:0x80000000
再举个栗子:
−
5
-5
−5
负数在计算机中以补码的形式存在。
原码为
1000 0000 0000 0000 0000 0000 0000 0101 1000\ \ 0000\ \ 0000\ \ 0000\ \ 0000\ \ 0000\ \ 0000\ \ 0101 1000 0000 0000 0000 0000 0000 0000 0101
反码(符号位不变,其他位全部取反):
1111 1111 1111 1111 1111 1111 1111 1010 1111\ \ 1111\ \ 1111\ \ 1111\ \ 1111\ \ 1111\ \ 1111\ \ 1010 1111 1111 1111 1111 1111 1111 1111 1010
补码(反码最末位加一):
1111 1111 1111 1111 1111 1111 1111 1011 1111\ \ 1111\ \ 1111\ \ 1111\ \ 1111\ \ 1111\ \ 1111\ \ 1011 1111 1111 1111 1111 1111 1111 1111 1011
十六进制表示为:0xFFFFFFB
另外,左移k位就是乘以 2 k 2^k 2k, 右移k位就是除以 2 k 2^k 2k。