首页 > 解决方案 > 我不明白位移

问题描述

我了解偏移运算符对数字执行乘法和除法。因此,当我有 80 >> 3 时,我将其翻译为将 80 除以二、三倍。当我看到这个 80 <<< 3 时,我将其翻译为将 80 乘以 2、3 倍。但是我没有理解正确,因为我不理解:9 <<< 99 = 72,因为我期望 9 乘以 2,99 次,所以 9 * ( 2 ^ 99)。但实际上不,它不起作用....我读过不同的文章,但我仍然不明白。

标签: bit-manipulationbitwise-operatorsbitbit-shift

解决方案


关于移位要记住的一点是,您的值只有有限数量的位,并且(至少对于原始值类型)该位数将小于 99。

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

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

...那是编译器告诉您您尝试执行的操作会调用未定义的行为。您要移动的值很可能是 32 位或 64 位长(取决于您的代码和/或您正在编译的计算机),因此向左移动更多位不是有效的做法。


推荐阅读