【发布时间】:2021-10-07 09:09:47
【问题描述】:
我偶尔注意到一些 C 代码坚持使用0 - x 来获得x 的加法补码,而不是写-x。现在,我想这些对于尺寸小于int 的类型是不等价的(edit:不,即使那样显然也是等价的),但除此之外 - 前者而不是后者有什么好处?
【问题讨论】:
-
实际上,无论哪种情况,都会被提升为
int。我看到它们产生不同效果的唯一情况是x是浮点数。 -
这些天我只是猜测可读性。在 K&R 时代,他们可能希望避免使用
y=-x,其中=-是-=的替代标记 -
不出所料,浮点零存在差异:coliru.stacked-crooked.com/a/bc2ec461b152cefc
-
看看这个偶尔来自哪里会很有趣。
-
根据工具链,
unsigned int x; x = -x;可能会导致警告,而unsigned int x; x = 0 - x;不会。对于浮点类型,一元减号通常映射到 IEEE-754 “取反”操作,这是一种位级操作,而不是算术操作。所以-x对于零和 NaN 操作数的行为与0 - x不同。
标签: c subtraction idioms negative-number