我偶尔注意到一些 C 代码坚持使用 0 - x
得到 x
的加补, 而不是写 -x
.现在,我想这些对于尺寸小于 int
的类型并不等效。 ( 编辑 :不,即使那时显然也等效),但除此之外 - 前者而不是后者有什么好处吗?
最佳答案
tl;博士:0-x
对于清除浮点零的符号很有用。
(正如@Deduplicator 在评论中指出的:)
我们中的许多人往往会忘记,在浮点类型中,我们有一个“正零”和一个“负零”值——打开和关闭符号位会留下相同的尾数和指数。阅读更多相关信息 here .
好吧,事实证明,这两个表达式在正符号零上的行为不同,在负符号零上的行为相同,如下所示:x
的值0-x
的值-x
的值-.0
0
0
0
0
-.0
See this on Coliru .
所以,当 x
是浮点类型,
0-x
. x
. 对于整数类型,它应该无关紧要。
另一方面,正如@NateEldredge 指出的,由于整数提升,表达式在小整数类型上应该是等效的 -
-x
转化为 x
的促销成int
,然后应用减号。
关于c - 什么时候写 "0 - x"而不是 "-x"有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68614388/