【发布时间】:2016-03-19 05:11:20
【问题描述】:
也许我忘记了一个巧妙的按位运算,但有没有更聪明的方式来表达以下内容?
int r = foo(); // returns an int
r -= r > 0; // same as `if(r > 0) r--;`
我想把这些行合并成一个表达式。
【问题讨论】:
-
定义“更聪明”。
r = max(r - 1, 0);是这样的“夹紧”操作的常用措辞。 -
@JonPurdy 我的意思是“更聪明”,因为消除条件。限制价值不是我的目标。
r可以是负值,在这种情况下不起作用。 -
啊,对。那为什么不简单地写下你的意思呢?
if (r > 0) --r; -
language-agnostic 怎么样?您的示例看起来像 C,这样的问题在声明性低级语言领域之外没有多大意义。 (根据问题标题,我希望能够贡献
awk '$1 > 0 { --$1 } 1',这在 Awk 脚本的世界中绝对是“单行”,但这显然不是您真正要问的。) -
无论如何,试图找到一种“聪明”(即或多或少深奥)的方式来混淆应该清楚表达的内容听起来并不值得。
标签: c++ c integer boolean-operations