【发布时间】:2009-11-09 12:31:09
【问题描述】:
在 K&R ANSI C 书的 A.7.4.5 节(一元减号运算符)中指出:
... 无符号数量的负数是通过从提升类型的最大值中减去提升值并加一来计算的; ...
这是如何计算的?你能举一个简短的C例子吗?
我不明白这怎么会产生负数,比如 200u:从任何整数类型(有符号或无符号)的最大值中减去 200,然后加 1 不会得到 -200。
我知道一元减号的作用——问题是我看不到结果是如何根据描述计算出来的。
【问题讨论】:
-
显然,您不知道一元减号的作用。您可能很清楚它对 signed 操作数的作用。你只是假设 unsigned 操作数的行为是相似的。你假设不正确。实际上,它对无符号操作数的行为是完全不同的(至少在语言级别上)。上面的引用正确地描述了无符号操作数的行为。
标签: c operators unary-operator