我只是想知道我是否可以在if语句的括号中更简单。
if (augend[i]=='0' && partialSum[i]=='0' && carry=='0')
例如(augend[i] & partialsum[i] & carry == '0')
。我还在学习,所以我不太确定这样的事情是否可行。
答案 0 :(得分:4)
不,'0'的数值不是0
,但通常是48
(但这不是可移植的),所以你的按位技巧将不起作用。
即使可以进行按位技巧,也不会这样做。保持代码不变,因为它清晰易懂。
您尝试做的是过早的微优化,最终是一个坏主意。
答案 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)