为什么-INT_MIN == INT_MIN,负号在位级如何操作?

Why does -INT_MIN == INT_MIN, and how the negative sign operate in bit level?

无法理解 -INT_MIN 如何在位级别转换为 INT_MIN

在常见的体系结构中,负值使用 2 的补码。

这会产生立竿见影的效果:-INT_MIN 将比 INT_MAX 大(增加 1)。这意味着结果值将是未定义的 (*)。对于常见的体系结构,它恰好又是 -INT_MIN。

只要看看有符号字节会发生什么(值越小越容易处理)MIN 是 -128,MAX 是 127。在 hexa 中,它们分别是 0x80 和 0x7F。但是 128 作为 int 值的表示又是 0x80。当您将其分配回以 (- (-128)) 结尾的带符号字节类型时,给出 -128...


由于 char 的级别低于 int,因此 char 被提升为 int,该操作给出了一个可以表示为 int 的结果,并且转换为 char 给出了实现定义的结果。但是 - INT_MIN 是一个表达式,它会给出无法表示为 int 值 的结果 。这是 异常情况 并且该行为根据标准明确未定义。话虽这么说,共同的实现处理一切都是一样的...