bit-manipulation - 我不明白位移
问题描述
我了解偏移运算符对数字执行乘法和除法。因此,当我有 80 >> 3 时,我将其翻译为将 80 除以二、三倍。当我看到这个 80 <<< 3 时,我将其翻译为将 80 乘以 2、3 倍。但是我没有理解正确,因为我不理解:9 <<< 99 = 72,因为我期望 9 乘以 2,99 次,所以 9 * ( 2 ^ 99)。但实际上不,它不起作用....我读过不同的文章,但我仍然不明白。
解决方案
关于移位要记住的一点是,您的值只有有限数量的位,并且(至少对于原始值类型)该位数将小于 99。
实际上,如果您在启用警告的情况下编译代码,您可能会看到如下警告:
`warning: shift count >= width of type [-Wshift-count-overflow]`
...那是编译器告诉您您尝试执行的操作会调用未定义的行为。您要移动的值很可能是 32 位或 64 位长(取决于您的代码和/或您正在编译的计算机),因此向左移动更多位不是有效的做法。
推荐阅读
- api - 使用请求 api 优化此循环
- android - 为什么在回调中调用 ViewModel 时会发生重组?
- c++ - 为什么 *int 与 go 中的 []int 不同
- python-3.x - 向函数添加可选参数
- c++ - c ++高斯随机数生成器不断生成相同的序列
- asp.net - 为什么每个 IIS 响应的末尾(作为最后一个字节)可能会有一个 UTF-8 BOM?
- reactjs - Excel文件数据未附加在数组反应JS中
- c++ - 如何从函数返回范围视图?
- wordpress - 可以从网站前端访问 WordPress 插件中的 CSV 文件吗?
- javascript - 如何获得一个月中的任何一天的日期?