你要将这个上下文贴出来,最起码你要将这个公式 !(~(x>>((sizeof(int)-1)<<3))) 是干嘛用的说出来。
-----------------------------------------------------------------------------------------------
“sizeof(int)得到的是整数4” --- sizeof(int)得到的是int类型所占字节数,没有人说它一定等于4
-----------------------------------------------------------------------------------------------
sizeof(int)得到的是int类型所占字节数
<<3 相当于乘以8,8是一个字节所占的bits数,也就是标准宏 CHAR_BIT
那么 x>>((sizeof(int)-1)*CHAR_BIT)) 很显然就是将 x 向右移位,将高byte移动到低byte上
我猜x应该是int兼容类型,因为代码中用了sizeof(int)
对于具符号的移位,溢出是未定义的,但好在这里只移动(sizeof(int)-1)*CHAR_BIT)位,永不会溢出。
现在看来,表达式的值只跟x的符号位和最高字节的值有关,就例举一下所有的可能性
x移位后得 0……00000000,~后得 1……11111111,!后得 0
x移位后得 0……01010101,~后得 1……10101010,!后得 0
x移位后得 0……11111111,~后得 1……00000000,!后得 0
x移位后得 1……10000000,~后得 0……01111111,!后得 0
x移位后得 1……10101010,~后得 0……01010101,!后得 0
x移位后得 1……11111111,~后得 0……00000000,!后得 1
结果就这样,除非你将书上的上下文说出来,否则没法猜下去了