为了方便用一套电路实现全部整数的加法——计算机以补码的形式存储数据:
正数:原码和补码一样。
负数:原码转补码取反加一:即符号位不变,其他各位取反,然后加1;
说明:
16-8=16+(-8)
(0001 0000)+(1000 1000)=(1001 1000) //-24补码:(0001 0000)+(1111 1000)=(10000 1000) //第九位舍去,+8
例:
int x=8;int y=~8;cout<<y; //输出-9
8的二进制:0000 1000—取反1111 0111——1000 1001,即-9;
例:
int a=-32;
int b=~a;
printf("%x",a); //补码:ffff ffe0
printf("%x",b); //1f
printf("%d",b); //31