gpt4 book ai didi

c - 在 C 中,常量移位与具有相同值的变量移位之间有区别吗?

转载 作者:行者123 更新时间:2023-12-02 07:00:23 24 4
gpt4 key购买 nike

我正在尝试位移值 0xFFFFFFFF 32位,它正确地来到0 如果我写

x = x << 32;

但它保持为 0xFFFFFFFF

当我写的时候:

x = x << y

y = 32

我真的完全不明白。

我需要能够使用一个变量,对于一个移动 32 - n 的函数

编辑

如果 << 32是未定义的,那么我真的无法理解一种方法来创建一个用 1 填充 n - 高位的函数

最佳答案

undefined behavior移动变量的位长度或更大。来自草案 C99 标准部分 6.5.7 按位移位运算符:

[...]If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined.

正如 Pascal 所说,您需要创建一个特殊情况或使用更广泛的类型。

gcc 在某些情况下会为此 see it live 生成警告:

warning: left shift count >= width of type [enabled by default]

关于c - 在 C 中,常量移位与具有相同值的变量移位之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21894503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com