我不了解移位

时间:2019-01-29 03:59:30

标签: bit-manipulation bitwise-operators bit bit-shift

我知道偏移量运算符会对数字进行乘法和除法。因此,当我有80 >> 3时,可以将80除以2、3倍来进行翻译。当我看到这个80 <<< 3时,我将其乘以2、3倍来转换它。但是我没有正确理解,因为我不明白:9 <<< 99 = 72,因为我期望9乘以2,99倍,所以9 *(2 ^ 99)。但是实际上不行,它行不通...。我读过不同的文章,但我仍然听不懂。

1 个答案:

答案 0 :(得分:1)

关于移位的要记住的事情是,您的值仅具有有限的位数,并且(至少对于原始值类型而言)该位数将少于99。

实际上,如果在启用警告的情况下编译代码,则可能会看到如下警告:

`warning: shift count >= width of type [-Wshift-count-overflow]`

...就是编译器告诉您您要执行的操作会调用未定义的行为。您最有可能要移位的值是32位或64位长(取决于您的代码和/或要编译的计算机),因此向左移位比这还多的位是无效的。