对在 bitshift 后返回不同结果的等效语句的解释

时间:2021-03-09 05:49:48

标签: c bit-shift

希望了解这里发生的事情,因为这两个陈述看起来相同。

因此,虽然 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

是什么导致了这种行为?

谢谢。

1 个答案:

答案 0 :(得分:1)

“就地”操作将 a 和 b 提升为 int,结果也将是一个 int,然后您对其进行移位。 在 c = b - a 的赋值中,操作首先被提升为 int 操作,执行,然后类型转换回 uint(在 c 中设置)。 搜索关键字是“整数促销”

相关问题