当前位置: C语言 -- 专题 -- 最小有符号整数的绝对值

最小有符号整数的绝对值

一、有符号整数的存储

现代计算机中有符号整数通常以二进制补码形式存储。正整数的补码和原码相同;负整数的补码由其对应正整数的原码取反后加1


4位的-5为例:

对应正整数的原码为5原码=01012

0 1 0 1
取反  1 0 1 0
+1 1 0 1 1

所以-5的补码形式为-5补码=10112


二、位数和最小值之间的关系

3位二进制补码和十进制有符号整数之间的对应关系如下表所示:

 位   值 
000 0
001 1
010 2
011 3
100 -4
101 -3
110 -2
111 -1

4位二进制补码和十进制有符号整数之间的对应关系如下表所示:

 位   值 
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 -8
1001 -7
1010 -6
1011 -5
1100 -4
1101 -3
1110 -2
1111 -1

通过上述两表不难发现有符号整数的最小值和位数之间的关系,具体如下所示:

 位数   值  补码
3 -4 100
4 -8 1000
5 -16 10000
... ... ...
N -2N-1 100000(N-1个0)

三、最小有符号整数的绝对值

先以-5为例,-5的绝对值是5,看看是如何从-55的。

1 0 1 1
-1 1 0 1 0
取反  0 1 0 1

对负整数取绝对值其实就是对其补码减一后取反;同样对最小负整数取绝对值也就是对其补码减一后取反。


4位有符号整数的最小值为例,其二进制补码形式为:1000

1 0 0 0
-1 0 1 1 1
取反  1 0 0 0

结果的补码形式为:1000

所以最小有符号整数的绝对值还是其自身。