c - 什么时候写 "0 - x"而不是 "-x"有用?

标签 c subtraction idioms negative-number

我偶尔注意到一些 C 代码坚持使用 0 - x得到 x 的加补, 而不是写 -x .现在,我想这些对于尺寸小于 int 的类型并不等效。 ( 编辑 :不,即使那时显然也等效),但除此之外 - 前者而不是后者有什么好处吗?

最佳答案

tl;博士:0-x对于清除浮点零的符号很有用。
(正如@Deduplicator 在评论中指出的:)
我们中的许多人往往会忘记,在浮点类型中,我们有一个“正零”和一个“负零”值——打开和关闭符号位会留下相同的尾数和指数。阅读更多相关信息 here .
好吧,事实证明,这两个表达式在正符号零上的行为不同,在负符号零上的行为相同,如下所示:

x 的值0-x 的值-x 的值

-.00000-.0

See this on Coliru .
所以,当 x是浮点类型,

  • 如果您想“忘记零的符号”,请使用 0-x .
  • 如果你想“保持零的符号”,使用 x .

  • 对于整数类型,它应该无关紧要。

    另一方面,正如@NateEldredge 指出的,由于整数提升,表达式在小整数类型上应该是等效的 - -x转化为 x 的促销成int ,然后应用减号。

    关于c - 什么时候写 "0 - x"而不是 "-x"有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68614388/

    相关文章:

    c - RGB 到 RGB 加琥珀色

    python - 从 Pandas Dataframe 中每个 Id 的第一个时间戳中减去最后一个时间戳

    java - boolean 组合的开关结构

    go - Go 中连接前导零的惯用方法

    go - 返回nil,nil不是惯用的去吗?

    c - 在 C 中向文件写入结构体/从文件读取结构体

    C错误: Identifier <funtion_from_other_header> is undefined

    c++ - OpenCV cvtColor() 改变了我的图像尺寸并且有错误的颜色

    C++ 不能减去两个字符串

    arrays - 将 NX1 矩阵的一个元素与另一个元素相减