下面程序当输入10时,为什么会输出-11,请指点#include<stdio.h>#include<conio.h>#include<stdlib.h>
int main(void){ int num,reverse;
scanf("%d",&num); reverse=~num; printf("reverse=%d\n",reverse); getch(); exit(0);}
10 → 0000 0000 0000 1010 (假设int为两字节)~10→ 1111 1111 1111 0101 (补码)→1000 0000 0000 1011 (原码-11)
1111 1111 1111 0101 (补码)→1000 0000 0000 1011 (原码-11)这是怎么回事?
输入10(0000 0000 0000 1010)时,~按位非,-> 1111 1111 1111 0101 计算机中第一位是符号位,1表示这个数是负数,而负数是按补码的形式进行存储的例如-1的原码是10 00 00 00 00 00 00 01 而-1反码变为11 11 11 11 11 11 11 10反码再加1即为补码即 11 11 11 11 11 11 11 11反过来,计算机输出的是原码,就是-1了