我不明白以下代码的结果:
unsigned char p = 170;
p = (~p) >> 4 & 255;
结果是:245,我不明白为什么。
首先(〜p)将应用使10101010变为01010101
这是一个正数,所以>> 4在我的理解中将导致00000101。
但是似乎是11110101,我不明白为什么。以我的理解,向右移动一个正数将插入0而不是1。
答案 0 :(得分:7)
在表达式中使用时,通常将小于int
的整数转换为int
。因此,以int
中的16位(~p) >> 4 & 255
为例:
p
是10101010 2 。int
,产生0000000010101010 2 。~p
产生1111111101010101 2 。(~p) >> 4
可能会产生1111111111110101 2 。 (负值的右移是实现定义的。)(~p) >> 4 & 255
产生11110101 2 。