我正在尝试对值进行位移0xFFFFFFFF
32 位,它正确地得出
0 如果我写
x = x << 32;
但它仍然是0xFFFFFFFF
当我写:
x = x << y
when y = 32
我真的完全不明白这一点。
不过,对于移动的函数,我需要能够使用变量32 - n
Edit
If << 32
是未定义的,那么我真的无法理解创建一个用 1 填充 n - 高位的函数的方法
It is 未定义的行为 https://en.wikipedia.org/wiki/Undefined_behavior移位变量的位长度或更大的位长度。来自C99标准草案部分6.5.7
按位移位运算符:
[...]如果右操作数的值为负数或大于或等于提升的左操作数的宽度,则行为未定义。
正如帕斯卡所说,您需要制作特殊情况或使用更广泛的类型。
gcc
在某些情况下可以为此生成警告现场观看 http://coliru.stacked-crooked.com/a/7a1c16a0e1f82333:
警告:左移计数 >= 类型宽度 [默认启用]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)