是否可以缩短此 if 语句

Is it possible to shorten this if statement?

本文关键字:if 语句 是否      更新时间:2023-10-16

>我只是想知道我是否可以使这个if语句的括号中的内容更简单。

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

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

  1. 不,"0"的数值不是0,但通常是48(但这不是可移植的(,因此您的按位技巧将不起作用。

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

你试图做的是过早的微优化,最终是一个坏主意。

封装:

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...);
}

不,这很短

如果这些是整数而不是字符(即 carry == 0 是你想要的(,那么你可以做

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

由于我们不知道你在做什么,所以很难说。但是if (carry),如果你在做某种或算术,if(!carry)感觉很自然。

你可以这样做:

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

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

你可以做

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

这是让代码的读者(可能包括未来的你(想知道 *$#@ 是怎么回事的绝佳方法。

如果讽刺不清楚,请不要这样做。 (除非这是针对"代码高尔夫"比赛,在这种情况下,您可能会改进许多其他事情。 您的原始代码要好得多。

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

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