为什么在C ++中,值为65536的整数变量的输出为0且< 65536给出负整数并且> 65536值给出正整数?

时间:2012-12-09 19:32:19

标签: c++ c integer type-conversion turbo-c

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

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

当我是初学者时,请明确解释逻辑并在此背后工作。

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分: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。

答案 2 :(得分:0)

我猜一旦跨越整数限制就会发生数字旋转。 因此,一旦达到65536,正数就会从更大的值开始。

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