看看这些代码:
ns
上层代码以其他方式(更简单):
const int a = 1 << 0; // = 1
const int b = 1 << 1; // = 2
const int c = 1 << 2; // = 4
const int d = 1 << 3; // = 8
int flag = 15; // = 1 + 2 + 4 + 8
int e1 = flag & a; // = 1
int e2 = flag & b; // = 2
int e3 = flag & c; // = 4
int e4 = flag & d; // = 8
bool b1 = e1 != 0; // = true
bool b2 = e2 != 0; // = true
bool b3 = e3 != 0; // = true
bool b4 = e4 != 0; // = true
当我们设置时,我需要反向公式来返回 const int a = 1 << 0; // = 1
const int b = 1 << 1; // = 2
const int c = 1 << 2; // = 4
const int d = 1 << 3; // = 8
int flag = 15; // = 1 + 2 + 4 + 8
bool b1 = (flag & a) != 0; // = true
bool b2 = (flag & b) != 0; // = true
bool b3 = (flag & c) != 0; // = true
bool b4 = (flag & d) != 0; // = true
值:
b1,b2,b3,b4 变量并使它们保持不变。
所以我们有flag
种不同的情况。设置2*2*2*2 = 16
变量的平均值(true|flase)*(true|flase)*(true|flase)*(true|flase) = 16
。
我们可以通过哪种方法找出b
应该是什么?
意思是:
flag
例如我想要 const int a = 1 << 0; // = 1
const int b = 1 << 1; // = 2
const int c = 1 << 2; // = 4
const int d = 1 << 3; // = 8
int flag = ?;
bool b1 = (? & a) != 0; // = true > I WANT b1 True
bool b2 = (? & b) != 0; // = false > I WANT b2 False
bool b3 = (? & c) != 0; // = true > I WANT b3 True
bool b4 = (? & d) != 0; // = false > I WANT b4 False
。那么旗帜是什么?
或
我想要b1 True , b2 False , b3 True , b4 False
。那么旗帜是什么?
你是怎么找到它并给我一个计算它的方法!
b1 False, b2 False , b3 True , b4 False
是15(a + b + c + d的总和),这样所有flag
变量都为真。
答案 0 :(得分:2)
使用按位或(flag
)运算使用您想要设置的值设置|
变量:
如果您希望b1
和b4
为true
且b2
y b3
为false
:
int flag = a | d;
bool b1 = (flag & a) != 0; // = true
bool b2 = (flag & b) != 0; // = false
bool b3 = (flag & c) != 0; // = false
bool b4 = (flag & d) != 0; // = true
如果您只想b3
true
:
int flag = c;
bool b1 = (flag & a) != 0; // = false
bool b2 = (flag & b) != 0; // = false
bool b3 = (flag & c) != 0; // = true
bool b4 = (flag & d) != 0; // = false
如果您有b
个值并想要标记:
int flag = (b1 ? a : 0) | (b2 ? b : 0) | (b3 ? c : 0) | (b4 ? d : 0);