为了便于问题描述,这里假设int是8位的,括号()中为二进制表示。
int a = 13;
int z = ~a;
a = 13 (00001101)
z = ~a (11110010) //~的意思是按位取反
这样 z = (11110010)
从有符号的角度来看,z的最高位为1,所以首先可以判断它是负数,然后它的数值等于取反加一,因此:
z = (11110010)
z = -(~(11110010) + 1)
z = -(00001101 + 1)
z = -(00001110)
z = -14