我有一些从数字中提取位的代码:
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。我对么?
你的代码是安全的。
那是因为几个班次的行为是明确定义的(只要每个班次都没有变化太多)。从本质上讲,您foo在每次迭代时都从一个全新的开始。
只有当您尝试一次移动比类型中更多的位时才会出现问题。