重复按位移位

P45*_*ent 0 c

我有一些从数字中提取位的代码:

uint32_t foo = getValue(); /*this just returns a value for `foo`*/

while (foo){
    foo <<= 2;
    doSomethingWithFoo(foo);
}
Run Code Online (Sandbox Code Playgroud)

我担心我在这里有未定义的行为,因为我最终会 "overshifting" foo。我对么?

Bat*_*eba 5

你的代码是安全的。

那是因为几个班次的行为是明确定义的(只要每个班次都没有变化太多)。从本质上讲,您foo在每次迭代时都从一个全新的开始。

只有当您尝试一次移动比类型更多的位时才会出现问题。