为什么在Turbo C ++ IDE中,硬编码值65536的整数变量的输出为0且小于该值(65536)是负整数且大于该值(65536)是正整数?
如果我们初始化一个硬编码值为65536的整数并打印它,它将打印0,如果我们将该整数变量的值从65536更改为65535或更小,如65534,依此类推它打印-1, - 2,...如果我们将整数变量的值从65536更改为65537或更高,它将打印1,2,3 ...依此类推,为什么会发生这种情况? 我在Turbo C ++ IDE上验证了它。
当我是初学者时,请明确解释逻辑并在此背后工作。
答案 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并且正数重新开始