这个条件测试什么?

Sha*_*man 5 c objective-c

在一些未注释的Objective-C代码中遇到了这个条件:

if (w & (w - 1))
{
    i = 1;
    while (i < w)
    {
        i *= 2;
    }
    w = i;
}
Run Code Online (Sandbox Code Playgroud)

哪里wsize_t大于1.

更新:添加条件for context包含的代码.

unw*_*ind 9

它测试是否设置了多个位w,即它是否不是2的精确幂.看到这里.

  • 实际上,它正在测试相反的情况:如果`w`不是2的幂. (2认同)