我最近遇到过这个问题:如何减少这个表达式: s> 73?61:60; 。
给出的提示是我们可以使用简单的比较,而不是使用条件运算符,它可以正常工作。
我不确定,但我认为有可能通过一些GCC扩展,尽管我自己无法弄明白。
编辑:整个表达方式如下:s-=s>73?61:60
答案 0 :(得分:15)
就像其他答案一样:
s -= (s > 73) + 60;
此表达式有效,因为规范定义了关系运算符的结果。第6.5.8节第6段:
每个运营商
<
(小于),>
(大于),<=
< / strong>(小于或等于),>=
(大于或等于)如果指定的关系是1
如果为false,则为true,0
。结果的类型为int
。
答案 1 :(得分:8)
如何减少此表达式:s-=s>73?61:60;
怎么样:
typedef int Price;
Price getPriceAfterRebate(const Price priceBeforeRebate)
{
const Price normalRebate = 60;
const Price superRebate = 61;
const Price superRebateThreshold = 73;
Price returnValue = priceBeforeRebate;
if (priceBeforeRebate > superRebateThreshold)
{
returnValue -= superRebate;
}
else
{
returnValue -= normalRebate;
}
return returnValue;
}
多田!一段难看的难以维护的代码被简化为可读且可维护的代码块。
答案 2 :(得分:4)
这是一段如此丑陋的代码,我无法相信我写的,但我认为它符合要求:
我对s>5?6:9
原始问题的回答:
9 - (((int)(s > 5)) * 3)
重写了更新后的问题:
61 - (int)(s > 73)
答案 3 :(得分:2)
也许这个?
60 + !!(s > 73)
双重爆炸将非零值映射为1,零映射为零。
答案 4 :(得分:0)
(s>5)
的价值是多少?你可以做一些算术吗?
如果没有提示,我会说这是一个糟糕的“陷阱”面试问题,需要一个与能力无关的特定洞察力。通过提示,它是...... 很好,但很暗淡。
答案 5 :(得分:0)
如果我们假设True = 1
和False = 0
,那么这不起作用:
s-= (60 + (s > 73))
答案 6 :(得分:0)
可以认为是s - =(s> 73)+ 60>&gt;是一个关系运算符,它将返回1或0,具体取决于表达式的结果s&gt; 73,因为返回值是int所以它可以正常工作