【问题标题】:terse code for comparing 4 numbers比较 4 个数字的简洁代码
【发布时间】:2011-04-04 19:12:23
【问题描述】:

我必须比较 4 个变量 a,b,c,d,如果其中任何一个是 -1,则返回 false。 这可能有多简洁? 可能是一些数学运算可以完成!我不喜欢为这个简单的事情浪费这么多的字符或台词。

【问题讨论】:

  • 你想简化a==-1 && b==-1 && c==-1 && d==-1
  • 比较 4 个变量 a,b,c,d 到底是什么?
  • erxtreamly 抱歉,问题中有错字。我的意思是如果其中任何一个 is -1 返回 false
  • 提示:避免使用聪明的代码,尤其是别人为你写的代码:)
  • 你有一个简单、直接的实现你想要的东西。 “我不喜欢为这个简单的事情浪费这么多的字符或台词”必须是试图提出一个不明显的替代方案的最糟糕的理由。你要做的就是让一些极端情况下的 bug 潜入和/或制造它,这样下一个查看代码的人就会想知道 WTF。

标签: c math coding-style xor


【解决方案1】:

通常:

return a!=-1 && b!=-1 && c!=-1 && d!=-1;

由于~(-1) == 0在2的补码机中,而0是一个假值,我们可以将上述简化为

return ~a && ~b && ~c && ~d;

或者,不依赖于 2 的补码:

return a+1 && b+1 && c+1 && d+1;

但它在溢出时具有未定义的行为。

(但请使用正常方式。多年后您可能会忘记这个聪明的黑客在做什么。)

【讨论】:

  • 不应该是return ((~a & ~b & ~c & ~d) < 0);吗? :)
  • Python 在 ~(85) && ~(65) 上显示 SyntaxError
  • @NeelBasu:但是标签上写的是“c”,而不是 Python。
  • 是的,我只是快速运行。我很害怕。
  • 如果abcd是有符号整数,则“不依赖2的补码”版本可能导致的溢出是未定义的。如果它们是小于int 的有符号整数类型,那很好。
【解决方案2】:

如果您的数字可以是非负数或 -1,那么您可以使用以下内容:

return~(a|b|c|d);

(去掉了空格,这样看起来更简洁)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多