我在32位窗口上学习了int和long的范围:
signed int: -32767 to 32767
signed long: -2147483647 to 2147483647
为什么int与msdn中提到的long类型相同? http://msdn.microsoft.com/en-us/library/s3f49ktz%28VS.80%29.aspx
答案 0 :(得分:2)
你的前提是错的。 int
和long
都是32位(32位)和64位Windows。
答案 1 :(得分:1)
确切的长度不是强制性的。 强制要求的是长度不能小于int。
答案 2 :(得分:0)
你将int与__int16进行比较,而你的long将与__int32进行比较。
为了更有意义,您必须查看字节列。
答案 3 :(得分:0)
我认为你打算写这个:
signed int: -2147483647 to 2147483647
...
出于完全历史原因,它们是相同的。 C ++标准没有规定每种类型的特定大小,这两种类型之间的唯一保证是sizeof(int) <= sizeof(long)
。
答案 4 :(得分:0)
使用整数的二进制表示时,您可以根据使用公式表示数据的位数计算签名数据类型的最大范围:
最低值:-2 ^(N-1) 最高值:2 ^(N-1) - 1
其中N是位数。
由于某种原因,您所谈论的“signed int”类型由16位表示,“signed long”由32位表示。
另请注意,您发布的范围似乎不完整,请注意16位有符号整数的范围下降到-32768,这比您的发布范围低一个。