我不明白以下代码的结果:
unsigned char p = 170;
p = (~p) >> 4 & 255;
Run Code Online (Sandbox Code Playgroud)
结果是:245我不明白为什么.
首先,(~p)将应用10101010到01010101的原因
这是一个正数,因此>> 4将导致00000101在我的理解中.
但它似乎是11110101,我不明白为什么.根据我的理解,将正数向右移动将插入0而不是1.
当在表达式中使用时,比int通常转换为的整数窄int.因此,使用16位int进行说明,在(~p) >> 4 & 255:
p是10101010 2.int,生成0000000010101010 2.~p生产1111111101010101 2.(~p) >> 4可能会产生1111111111110101 2.(负值的右移是实现定义的.)(~p) >> 4 & 255产生11110101 2.