希望了解这里发生的事情,因为这两个陈述看起来相同。
因此,虽然 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
是什么导致了这种行为?
谢谢。
答案 0 :(得分:1)
“就地”操作将 a 和 b 提升为 int,结果也将是一个 int,然后您对其进行移位。 在 c = b - a 的赋值中,操作首先被提升为 int 操作,执行,然后类型转换回 uint(在 c 中设置)。 搜索关键字是“整数促销”