本人今后不定期在CSDN上更新博客,大部分内容将会更新在个人博客:www.lijugang.com中!
先看一段简单的小程序:
#include<stdio.h>
void main()
{
int a=~10;
printf("%d\n\r",a);
}
相信大家很熟悉这段小程序的功能吧,就是做一个按位求反的运算,执行结果是-11.下来就这个过程详细分析.
10在32位机上的表示为0000 1010,对它按位求反的结果是1111 0101,但是这就是-11的二进制表示吗?显然不是,为什么会这样呢,因为为了减轻CPU的执行负担,二进制数在存储的时候是按照补码的方式存储的。因此还需要求该数的补码,欲求补码,先求反码,即1000 1010,对这个数再加1就是最终-11的二进制表示,即1000 1011。
其中最高位是符号位,0表示正数,1表示负数。此处涉及了微机原理的知识。