如何学习按位运算

问题描述 投票:0回答:1

我对这样的按位运算问题毫无头绪:

生成掩码,指示 x 中最左边的 1。假设 w=32。
例如,0xFF00 -> 0x8000 和 0x6600 -> 0x4000。
如果 x = 0,则返回 0。

该题还限制了只能使用按位运算和“-”“+”来解决问题。

我能理解此类问题的解决方案。但第一次遇到的时候我没有任何线索。这是否意味着我缺乏任何知识,例如离散数学?有没有熟练按位运算的来源?

c bit-manipulation
1个回答
0
投票

这是一种方法:

  • 初始化一个 32 位无符号整数
    m
    ,仅设置最高位 (
    1u << 31
    )。
  • 循环直到
    m
    达到
    0
    ,在每次迭代结束时将其右移一步。
  • 在循环中,检查
    m & value_to_check
    (按位与)是否非零。如果是的话,就分手吧
  • 循环结束后,
    m
    将设置
    value_to_check
    中最左边的位(如果
    value_to_check
    为零,则为零)。
© www.soinside.com 2019 - 2024. All rights reserved.