如何从布尔结果中获取所有的全部或全部零?

use*_*112 3 c++ bit-manipulation bitwise-operators

我(愚蠢地)认为如果我采用布尔结果为true,强制转换为int并向左移动它我最终会在每一位重复LSB,显然不是!

如果我有一个布尔结果并且我想将其转换为全部为true而所有零都为false,那么最简单的方法(计算)是什么?

bool result = x == y;

unsigned int x = 0;

//x becomes all ones when result is true
//x becomes all zeros when result is false
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 9

像这样,也许:

bool result = x == y;

unsigned int z = -result;
Run Code Online (Sandbox Code Playgroud)

  • 当然,将它包装在一个名称很好的函数中,因为这段代码很模糊.并添加评论. (3认同)
  • [现场演示为好的措施](http://coliru.stacked-crooked.com/a/a6e34f915a878a23) (2认同)

rig*_*old 7

一个更易读的解决方案IMO:

unsigned int set_or_unset_all_bits(bool comp) {
    return comp ? ~0u : 0;
}
Run Code Online (Sandbox Code Playgroud)