2012-08-01 80 views
-5

有沒有更好的辦法做這樣的事情......更快的方式來做到這一點?

int VarableNumberOne = RandomNumberGenerator(); 
int VarableNumberTwo = RandomNumberGenerator(); 

if(VarableNumberOne == 4 || VarableNumberOne == 8 || VarableNumberOne == 12) 
{ 
//do code 
} 
else if(VarableNumberTwo == 4 || VarableNumberTwo == 8 || VarableNumberTwo == 12) 
{ 
//do code 
} 

人誰可以拿出代碼的最短將獲勝。

+7

原始代碼有什麼問題? – Caesar 2012-08-01 15:35:09

+2

你想要「更快」,「更好」(不管是什麼意思)或「最短」? – 2012-08-01 15:37:17

+0

可以修改哪些內容以使其更快?例如:您是否只能在其他情況下評估VarableNumberTwo? – tgmath 2012-08-01 15:43:45

回答

2

這取決於什麼RandomNumberGenerator返回。假設4,8和12的4它將返回唯一的倍數,你可以做這樣的事情:

if (VarableNumberOne % 4 == 0) 
{ 
    //do code 
} 
else if (VarableNumberTwo % 4 == 0) 
{ 
    //do code 
} 
0
if (variableNumberOne & 12) { 
    // ... 
} else if (variableNumberTwo & 12) { 
    // ... 
} 
1

您需要檢查所需的值的反向掩碼,如果值不爲零。

int a = RandomNumberGenerator(); 
int b = RandomNumberGenerator(); 

if(a && !(a & ~12)) 
{ 
//do code 
} 
else if(b && !(b & ~12)) 
{ 
//do code 
} 
+0

你在'const int InvMask =〜(4&8 & 12); // 0x11110011','4&8'爲0時出錯。它應該是'const int InvMask =〜12;'。(而不是'(v &m)== 0'你可以使用'!(v&m)'保存幾個字符,因爲OP要求最短的代碼) – 2012-08-01 18:09:32

+0

@Daniel Answer編輯 – ErikEsTT 2012-08-01 18:22:02

+0

** I **不會計算空白,所以yuck要把它解決掉,但是既然你走得很遠,直接使用魔術常量,'const int m ='需要很多'〜12'來補償;) – 2012-08-01 18:26:57

相關問題