如何简化此代码?
if (x == 0) x = 1;
else if (x == 1) x = 0;
else if (x == 2) x = 3;
else if (x == 3) x = 2;
答案 0 :(得分:15)
如果x始终在0到3之间,那么试试这个:
x ^= 1;
它切换最不重要的位。
如果x可以是0到3之间的值,那么您可以先测试:
if (x >= 0 && x <= 3) {
x ^= 1;
}
答案 1 :(得分:9)
这是最简单的形式:
if (x == 0) x = 1;
else if (x == 1) x = 0;
else if (x == 2) x = 3;
else if (x == 3) x = 2;
等等......这正是你的代码。
隐藏的一个内衬并不简单。
答案 2 :(得分:5)
要使用伪代码表示法,可能:
if (x % 2 == 0) x = x + 1
else x = x - 1
例如,如果是偶数,则添加一个,否则减去?然而,在优化方面,我没有看到原始代码的特别慢或错。
答案 3 :(得分:5)
您可以使用以下内容:
int mymap[4] = {1,0,3,2};
然后在你的代码中使用:
x = mymap[x];
答案 4 :(得分:2)
if(x >= 0 && x <= 3)
if((x%2) != 0) //odd
x--;
else if((x%2) == 0) //even
x++;
答案 5 :(得分:2)
不是我认为这更简单,并且不会将案例限制为0..3,但是:
x += (x % 2 == 0) ? 1 : -1;
答案 6 :(得分:2)
x ^= x & ~3 == 0 ? 1 : 0;
不幸的是,我的代码非常简单,因此无法使最少30个字符...
答案 7 :(得分:1)
处理这样的简单数据的常用方法是使用switch语句。
答案 8 :(得分:1)
代码使用switch
语句更具可读性:
switch(x) {
case 0: x=1: break;
case 1: x=0: break;
case 2: x=3: break;
case 3: x=2; break;
}
然而,它只是代码可读性,而不是算法,也不是优化。
答案 9 :(得分:1)
x^=1;
除非x可以低于0或高于3,否则问题规范不会说明。
答案 10 :(得分:1)
if( 0 <= x && x <= 3 )
x ^= 1;
答案 11 :(得分:1)
一个班轮:
x=(x==0)?1:((x==1)?0:(x==2)?3:(x==3)?2:x);
答案 12 :(得分:1)
if ( x >>> 2 == 0 )
{ x ^= 1;
}
答案 13 :(得分:0)
最好的方法......
if(x % 2 == 0){
x = +x;
}else{
x = -x;
}
答案 14 :(得分:-2)