问题描述
希望了解这里发生的事情,因为这两个陈述看起来相同。
因此,虽然 c >> 1
输出是我所期望的,但原位移动包装的 uint 会改变结果。
#include <stdio.h>
#include <stdint.h>
int main() {
uint16_t a,b,c;
a = 20180;
b = 4106;
c = b - a;
printf("%hu\n",c >> 1);
printf("%hu\n",(b - a) >> 1);
return 0;
}
打印:
24731
57499
是什么导致了这种行为?
谢谢。
解决方法
“就地”操作将 a 和 b 提升为 int,结果也将是一个 int,然后您对其进行移位。 在 c = b - a 的赋值中,操作首先被提升为 int 操作,执行,然后类型转换回 uint(在 c 中设置)。 搜索关键字是“整数促销”