一段代码引发的思考——循环左移

2023年 10月 1日 36.5k 0

前言

在看源码的时候发现一段代码很神奇,(x > (32 - n))。乍一看不知道它在计算啥,又是右移操作,又有左移操作,还涉及到按位与和按位或操作,于是博主就对其做了深入学习。

下文博主会从位运算基础开始,然后深入探讨该表达式的计算过程。

基础——位运算

在深入讨论这段代码之前,先了解一些基本的位运算知识。

  • 位移操作(Shift Operations) :位移操作分为左移()。左移将二进制数的所有位向左移动指定数量的位数,右移则将所有位向右移动。
    • 例如,x (32 - n))

      接下来将代码分解来理解:

    • (x > (32 - n): 接下来,对前一步得到的结果进行右移操作,将剩余的 32 位向右移动 (32 - n) 位。这使得之前左移出的位重新出现在最右边。
    • 最后,将两个部分的结果使用按位或操作合并。这会将循环左移后的低位和循环右移后的高位组合起来,得到最终的循环左移结果。
    • 循环左移的计算过程示例

      让我们通过一个示例来演示这个表达式的计算过程。假设我们有一个 32 位整数 x,其二进制表示为:

      x = 11010110101110100010101011001101
      

      并且我们希望将它循环左移 5 位。现在,让我们按照表达式的步骤来计算:

    • (x > (32 - 5):将上一步结果右移 27 位,得到结果 00000000000000000000000000011010
    • 最后,将第一步和第三步的结果进行按位或操作:11010111010001010101100110100000 | 00000000000000000000000000011010,得到最终的循环左移结果为 11010111010001010101100110111010
    • 通过这个计算过程,成功地将整数 x 循环左移了 5 位,同时保持了 32 位的位数不变。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论