带位移位的 For 循环

Wil*_*ai 1 c c++ for-loop bit

谁能解释一下这个 for 循环是如何工作的?

for (bitMask = 0x01; bitMask; bitMask <<= 1)

这是我第一次在 for 循环中遇到这样的语法,很想知道循环将如何结束。

Vis*_*l T 6

我认为bitMask 的数据类型在这里很重要。因此将其视为 int。下面就会发生。

  1. bitMask 将被初始化为值 1。
  2. 每次迭代都会将 bitMask 的位值移动 1 位。
    例如。1 = 00001(位的数量取决于平台。考虑到 32 位)左移 1 将给出 00010,等于值 2
  3. 这将为位掩码生成以下值序列。1,2,4,16,...,直到值为 1 的位溢出 32 位大小。
  4. 一旦溢出,该值将变为“未定义” int如果 bitMask 被视为Unsigned Int,则为 0,因为现在所有位都为零。使 for 循环中的条件为 false 并中断。

更简单易读的版本:

for (bitMask = 1; bitMask != 0; bitMask *= 2)
Run Code Online (Sandbox Code Playgroud)

  • 第 4 项应读为“4。一旦溢出,该值将变为未定义,没有人能知道这些位会发生什么情况。” (2认同)