您可以将某些内容存储在临时变量中,然后尝试如下操作:
解决方案来自:- Find maximum of three number in C without using conditional statement and ternary operator
利用布尔表达式中的短路:
int max(int a, int b, int c) {
int m = a;
(m < b) && (m = b); //these are not conditional statements.
(m < c) && (m = c); //these are just boolean expressions.
return m; } Explanation:
在诸如 x && y 之类的布尔 AND 运算中,当且仅当
x 是真的。如果 x 为假,则不计算 y,因为整个
表达式将是错误的,甚至可以在不评估的情况下推断出
是的。这称为短路,当布尔值
表达式可以在不计算其中所有操作数的情况下推导出。
将这个原则应用到上面的代码中。最初 m 是 a。现在如果 (m
简而言之,您可以阅读表达式 (m
测试代码:
int main() {
printf("%d\n", max(1,2,3));
printf("%d\n", max(2,3,1));
printf("%d\n", max(3,1,2));
return 0; } Output:
3 3 3 在线演示:http://www.ideone.com/8045P
注意 max 的实现会给出警告,因为已评估
不使用表达式:
prog.c:6:警告:未使用计算的值 prog.c:7:警告:值
不使用计算 为避免这些(无害的)警告,您可以
实现最大值为:
int max(int a, int b, int c) {
int m = a;
(void)((m < b) && (m = b)); //these are not conditional statements.
(void)((m < c) && (m = c)); //these are just boolean expressions.
return m; }
诀窍在于,现在我们将布尔表达式强制转换为 void,这会导致警告被抑制:
http://www.ideone.com/PZ1sP