2011-09-21 108 views
-1

有4个属性,每个属性都可以激活。要知道哪一个被激活,我收到一个int值。使用按位和操作我得到1,2,4或8每个数字对应一个激活的属性。按位运算

if((state & 1) == 1) { 
status = 1; 
       } else if ((state & 2) == 2) { 
status = 2; 
       } else if((state & 4) == 4) { 
status = 4; 
       } else if((state & 8) == 8) { 
status = 8; 
       } 

我想知道是否可以用一个按位运算来计算状态? 谢谢。

+0

在一行代码中做什么?有4个不同的if语句来处理每个选项。它怎样才能凝聚在一条线上? –

+0

您可以不使用任何代码行,因为这不会执行任何操作。你需要提供一个更现实的例子,很大程度上取决于块中的内容。 –

+0

你怎么能考虑把4如果在一个单一的线? – Stefano

回答

2

如果state总是正好设置了四个位中的一个,那么你的代码是不是非常有用,因为它是一样的

status = state; 

如果state可以设置的任何位数,你的代码集status设置为state中的最低有效位。这也可以用:

status = state & -state; 
+0

辉煌的二元操作。我认为这正是@ xtrem06想要的。 – Marcelo