用1字节8位数值来举例,如上图所示👆
大家可以自己比着画一个数轴,数轴上面是整型数值,下面是数值在计算机中的表示,也就是数值的补码。
我们在教材上学到,有符号数值在计算机中是通过其补码来表示的。其中,正整数的补码就是其本身的二进制原码,负整数的补码就是其本身的绝对值的二进制原码取反再加一,这张图可以帮你理解为什么负整数的补码非得是按这种方式表示的。
当然,还有很多补充点我暂时没找到合适的图形来表达,但是这张图片已经很简洁明了,我一直对这块内容理解得很模糊,一直到想清楚用这个方法来表示。
做题过程中会看到很多二进制运算问题,记住了图中标识的几个特殊点的话会比较方便计算,例如(C语言代码):
#include <stdio.h>
void main(
{
short int a = -32768, b;
b = a - 1;
printf("a = %d, b = %d\n", a, b);
}
如果你知道-32768是-2^15的话,那么a的数值就是位于数轴的最左端,那么a - 1那当然是回到数轴的最右端,即32767。
另外,感谢一位博主的这篇文章的清晰解读,附下链接: