是否有可能缩短这个if语句?

时间:2018-03-16 00:03:51

标签: c++

我只是想知道我是否可以在if语句的括号中更简单。

if (augend[i]=='0' && partialSum[i]=='0' && carry=='0')

例如(augend[i] & partialsum[i] & carry == '0')。我还在学习,所以我不太确定这样的事情是否可行。

7 个答案:

答案 0 :(得分:4)

  1. 不,'0'的数值不是0,但通常是48(但这不是可移植的),所以你的按位技巧将不起作用。

  2. 即使可以进行按位技巧,也不会这样做。保持代码不变,因为它清晰易懂。

  3. 您尝试做的是过早的微优化,最终是一个坏主意。

答案 1 :(得分:1)

封装:

bool zeros() {
    return true;
}
template<class... chars>
bool zeros(char x, chars... lst) {
    return x == '0' && zeros(lst...);
}
if (zeros(augend[i], partialSum[i], carry)){
     //impl//
}   

 //lined up just for size comparison
if (augend[i]=='0' && partialSum[i]=='0' && carry=='0')
if (zeros(augend[i], partialSum[i], carry))

这是更简短的,你需要比较的参数越多,就越短(因为你不需要每次都写=='0')。

如果您需要任何炭火......

bool equal(char match) {
   return true;
}
template<class... chars>
bool equal(char match, char front, chars... lst) {
    return match == front && equal(match, lst...);
}

答案 2 :(得分:0)

不,这可能是短暂的

答案 3 :(得分:0)

如果这些是整数而不是字符(即进位== 0就是你想要的那样)那么你可以做到

if (!augend[i] && !partialSum[i] && !carry)

因为我们不知道你在做什么很难说。但是if (carry)if(!carry)如果你正在做某种或算术的话,会感觉很自然。

答案 4 :(得分:0)

你可以这样做:

if(augend[i]=='0' & partialSum[i]=='0' & carry=='0'){}

as ==具有更高的优先级,并将返回bool,可以使用哪个按位运算符。

答案 5 :(得分:0)

你可以做到

if(!(augend[i]^'0'|partialSum[i]^'0'|carry^'0'))

这是让你的代码读者很好的一种方式,包括未来你可能想知道* $#@正在发生什么。

如果讽刺不清楚,请不要这样做。 (除非这是针对“代码高尔夫”比赛,在这种情况下,你可能会有很多其他事情可以改进。)你原来的代码要好得多。

答案 6 :(得分:-1)

if (augend[i]==partialSum[i]==carry=='0')

(augend[i]==partialSum[i]==carry=='0') ? (if_true) : (if_false)