我希望下面的代码将输出10
,因为(~port)
等于10100101
因此,当我们将其右移4
时,我们会得到00001010
,即10
。
但是输出是250
!为什么?
int main()
{
uint8_t port = 0x5a;
uint8_t result_8 = (~port) >> 4;
//result_8 = result_8 >> 4;
printf("%i", result_8);
return 0;
}
最佳答案
C在对其执行操作之前将uint8_t
提升为int
。所以:
port
提升为有符号整数0x0000005a
。 ~
将其反转为0xffffffa5
。 0xfffffffa
。 uint8_t
,给出了0xfa == 250
。 要解决此问题,请截断临时结果:
uint8_t result_8 = (uint8_t)(~port) >> 4;
遮盖它:
uint8_t result_8 = (~port & 0xff) >> 4;
或xor(感谢@Nayuki!):
uint8_t result_8 = (port ^ 0xff) >> 4;
关于c - 按位求反后出现右移的意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55681351/