C中三元运算符的逻辑与
我试图在C中找到3个整数(var1,var2,var3)的最大值和最小值。为了让事情稍微有趣一点,我将逻辑写在一行中C中三元运算符的逻辑与,c,ternary-operator,logical-operators,logical-and,C,Ternary Operator,Logical Operators,Logical And,我试图在C中找到3个整数(var1,var2,var3)的最大值和最小值。为了让事情稍微有趣一点,我将逻辑写在一行中 (var1>var2)?((var1>var3)?(max=var1):(max=var3)&&(min=var2)):((var2>var3)?(max=var2):(max=var3)&&(min=var1)); 为了使调试更容易,这里有几行令人厌烦的版本 (var1>var2)? ((var1>var3
(var1>var2)?((var1>var3)?(max=var1):(max=var3)&&(min=var2)):((var2>var3)?(max=var2):(max=var3)&&(min=var1));
为了使调试更容易,这里有几行令人厌烦的版本
(var1>var2)?
((var1>var3)?
(max=var1):
(max=var3)&&(min=var2)
):
((var2>var3)?
(max=var2):
(max=var3)&&(min=var1)
);
未执行逻辑AND,min返回垃圾值。
帮助。看看这个无聊的版本:
(var1>var2)?
((var1>var3)?
(max=var1): // nothing gets assigned to min
(max=var3)&&(min=var2) // nothing gets assigned to min, if var3==0
):
((var2>var3)?
(max=var2): // nothing gets assigned to min
(max=var3)&&(min=var1) // nothing gets assigned to min, if var3==0
);
你可以看到,在很多情况下,没有任何东西被分配到
min
来让事情变得复杂,你只是在一行上写。帮助自己的第一步是将一行拆分为几行,以简化分析。我的测试部分有效。如果您使用sentinel值初始化min
和max
,则可能更容易跟踪问题,而不是获取“垃圾”。在枯燥的版本中,您可以非常清楚地看到,如果max为0,则不会发生最小赋值。这是否适合失败的测试用例?否则,有些情况下,例如var1为max,其中根本没有为min分配任何代码。