2012-12-09 238 views
0

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

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

请清楚地解释逻辑和工作背后,因为我是初学者。

+2

你应该阅读开始:http://en.wikipedia.org/wiki/Integer_%28computer_science%29在您选择的编译器中,出现int变量类型为16位,它给出的范围为-32768至32767,如果为无符号,则为0至65535 。 –

+1

'((x + 2^15)mod 2^16) - 2^15' – Mysticial

+1

你的问题就像玩笑一样。请研究你的书 – MajidTaheri

回答

7

古Turbo C++使用16位int

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”

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

0

我猜一旦我们超过了整数限制,就会发生数字的旋转。 所以一旦达到65536,再次正数开始更大的值。

原来限制-32768到32767。如果我们去到32768,我们实际上已经达到-32768.So当我们到达65536,我们得到0和正数一遍

相关问题