2012-08-01 45 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

相关问题