2011-09-21 112 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