代码之家  ›  专栏  ›  技术社区  ›  machine_1

在这种情况下,负0会是一个问题吗?

  •  2
  • machine_1  · 技术社区  · 4 年前

    我有一个简单的问题,是出于安全编码的动机。

    我遇到了一种情况,我必须将除法或 0 到一个 int 变量,所以我使用了以下符号:

    int a = -(b % c);
    

    两者 b c 是正整数。表达式 (b % c) 将产生一个正数或 0 a 将分配结果的负值。

    如果 0 -0 评估到? 0 或者是否定的 ? 如果发生后一种情况会有什么影响?

    P、 我不知道什么是负面的 是。

    2 回复  |  直到 4 年前
        1
  •  3
  •   Eric Postpischil    4 年前

    -(b % c)

    如果实现支持负零,则只能通过以下方式生成:

    这个 & , | ^ , ~ , << ,和 >> 具有产生这种值的操作数的运算符;

    这个 + , - * , / % 一个操作数为负零且结果为零的运算符;

    - 作为一元运算符,我们得到了 b c b % c 无法产生负零,因此 - -(b%c) 不是负零。

    == ==

    在现代C实现中,负零对于整数是极为罕见的。现代的实现绝大多数情况下使用的是两个补码,它没有负零。只有专门的/历史的/过时的实现才可能使用具有负零的替代整数表示(1补码、符号和幅度)。浮点表示通常有负零,但在比较按值相等( == != , < > , <= ,和 >= 操作员)。

        2
  •  1
  •   Noob    4 年前