0

为什么在 Turbo C++ IDE 中,硬编码值 65536 的整数变量的输出为 0,小于该值 (65536) 为负整数,大于该值 (65536) 为正整数?

如果我们用硬编码值 65536 初始化一个整数并打印它,它将打印 0,如果我们将该整数变量的值从 65536 更改为 65535 或更小,如 65534 等等,它会打印 -1、-2、。 .. 如果我们将该整数变量的值从 65536 更改为 65537 或更大,它将打印 1,2,3... 等等,为什么会发生这种情况?我在 Turbo C++ IDE 上验证了它。

由于我是初学者,请清楚地解释其背后的逻辑和工作。

4

3 回答 3

7

古老的 Turbo C++ 使用 16 位int.

于 2012-12-09T19:34:59.730 回答
4

您似乎在谈论 16 位有符号值(-32768 到 32767),这意味着它将最左边的位视为符号。

如果您将其放入 65535 (1111 1111 1111 1111) - 它将把它视为负数,因为最左边的位是 1。其他位(全为 1)给出最大的负值,等于“-1”。它将保持负数,直到最左边的位变为 0。它将是 32767。

如果您输入 65536 (0001 0000 0000 0000 0000) - 它只会剪切最后 16 位,全部为零,并且该值将等于“0”。

65538 (0001 0000 0000 0000 0010) - 再次剪切最后 16 位,你会得到 '2'

注意:一般来说,您不能保存超出类型范围的值。如果你有 16 位整数,只能存储(-32768 到 32767),那么你不能放 65535。

于 2012-12-09T19:45:25.963 回答
0

我猜一旦我们越过整数限制,就会发生数字旋转。因此,一旦达到 65536,正数再次开始获得更大的值。

原来的限制是 -32768 到 32767。如果我们去 32768,我们实际上已经达到了 -32768。所以当我们达到 65536 时,我们得到 0,正数重新开始

于 2012-12-09T20:01:22.260 回答