我不明白下面的代码的结果:
unsigned char p = 170;
p = (~p) >> 4 & 255;
其结果是:245,我不明白为什么。
首先,(〜P)将采用什么使得10101010至01010101
这是一个正数,因此>> 4会导致00000101在我的理解。
但是,这似乎是11110101,我不明白为什么。在我的理解正数向右移动将插入0而不是1。
当在表达式中使用,比int
窄的整数,通常转换为int
。所以,使用说明16位int
,在(~p) >> 4 & 255
:
p
是101010102。int
,产生00000000101010102。~p
产生11111111010101012。(~p) >> 4
可产生11111111111101012.(负值的右移是实现定义。)(~p) >> 4 & 255
产生111101012。