题
可以 unsigned long int
举行十个数字号(1,000,000,000-9,999,999,999)在一个32位的计算机?
此外,有什么范围 unsigned long int
, long int
, unsigned int
, short int
, short unsigned int
, , int
?
解决方案
的 最低 范围,你可以依靠的是:
short int
和int
:-32,767为32,767个unsigned short int
和unsigned int
:0 65535个long int
:-2,147,483,647 2147483647unsigned long int
:0到4,294,967,295
这意味着没有, long int
不能 依靠存储的任何10位数字。然而,一个更大的类型 long long int
被介绍给C C99和C++在C++11(这种类型还常常支持扩编译器建立老年准则没有包括它)。最小范围内对这种类型,如果你支持编译器,是:
long long int
:-9,223,372,036,854,775,807到9,223,372,036,854,775,807unsigned long long int
:0到18,446,744,073,709,551,615
所以那种类型将足够大(再次, 如果 你拥有它可用)。
注意对于那些认为我犯了一个错误与这些较低的界限-我没有。C要求的范围编写,以允许为的补充或签幅度的整的陈述,其中最低的表现值和最高表现的价值不同,只有在签署。这也是允许有一两个补代表的价值与符号位1和所有价值的位0是 陷阱的表示 而不是一个法律价值。换句话说, int
是 不 需要能够代表的价值-32,768.
其他提示
虽然最小尺寸是,但C ++标准中没有定义数字类型的大小。告诉您平台大小的方法是使用数字限制
例如,int的最大值可以通过以下方式找到:
std::numeric_limits<int>::max();
计算机在基数10中不起作用,这意味着最大值将以2 n -1的形式出现,因为内存中的表示数如何。例如,8位(1字节)
0100 1000
设置为1时最右边的位(数字)表示2 0 ,下一位2 1 ,然后2 2 等等直到我们到达最左边的位,如果数字是无符号代表2 7 。
因此数字代表2 6 + 2 3 = 64 + 8 = 72,因为右边的第4位和右边的第7位被设置。
如果我们将所有值设置为1:
11111111
现在的数字(假设无符号)
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 2 8 - 1
正如我们所看到的,这是可以用8位表示的最大可能值。
在我的机器和int和long是相同的,每个能够保持在-2 31 到2 31 - 1.根据我的经验,最常见的大小在现代32位台式机上。
要了解 系统的限制:
#include <iostream>
#include <limits>
int main(int, char **) {
std::cout
<< static_cast< int >(std::numeric_limits< char >::max()) << "\n"
<< static_cast< int >(std::numeric_limits< unsigned char >::max()) << "\n"
<< std::numeric_limits< short >::max() << "\n"
<< std::numeric_limits< unsigned short >::max() << "\n"
<< std::numeric_limits< int >::max() << "\n"
<< std::numeric_limits< unsigned int >::max() << "\n"
<< std::numeric_limits< long >::max() << "\n"
<< std::numeric_limits< unsigned long >::max() << "\n"
<< std::numeric_limits< long long >::max() << "\n"
<< std::numeric_limits< unsigned long long >::max() << "\n";
}
请注意,long long
仅在C99和C ++ 11中合法。
此处的其他人将发布data_sizes和精度等链接
我要告诉你如何弄清楚自己。
写一个小应用程序,它将执行以下操作。
unsigned int ui;
std::cout << sizeof(ui));
这将(取决于编译器和架构)打印2,4或8,说2个字节长,4个字节长等。
让我们假设它是4。
您现在想要存储的最大值为4个字节,一个字节的最大值为(十六进制)0xFF。四个字节的最大值是0x,后跟8个f(每个字节一对f,0x告诉编译器后面的字符串是十六进制数)。现在更改程序以分配该值并打印结果
unsigned int ui = 0xFFFFFFFF;
std::cout << ui;
这是unsigned int可以容纳的最大值,如基数10表示所示。
现在为长期,短片以及您对其感兴趣的任何其他INTEGER值进行此操作。
注意:这种方法不适用于浮点数(即double或float)。
希望这有帮助
在C ++中,现在使用2的compliment方法存储int和其他数据。 这意味着范围是:
-2147483648 to 2147483647
或-2 ^ 31至2 ^ 31-1
1位保留为0,因此正值小于2 ^(31)
对于无符号数据类型,没有符号位,所有位都用于数据 ;而对于签名数据类型,MSB表示符号位,剩余位表示数据。
要查找范围,请执行以下操作:
步骤:1 - <!> gt;找出给定数据类型的字节数。
步骤:2 - <!> gt;应用以下计算。
Let n = no of bits in data type
For signed data type ::
Lower Range = -(2^(n-1))
Upper Range = (2^(n-1)) - 1)
For unsigned data type ::
Lower Range = 0
Upper Range = (2^(n)) - 1
例如
对于无符号整数= 4字节(32位) - <!> gt;范围[0,(2 ^(32)) - 1]
对于signed int size = 4字节(32位) - <!> gt;范围[ - (2 ^(32-1)),(2 ^(32-1)) - 1]
不,只有十位数的一部分可以存储在无符号long int中,其有效范围为0到4,294,967,295。 你可以参考这个: http://msdn.microsoft.com/en-us /library/s3f49ktz(VS.80).aspx
无符号long int可以在32位计算机上保存十位数字(1,000,000,000 - 9,999,999,999)。
没有
您应该查看numeric_limits <!> lt; <!> gt;的特化。给定类型的模板。它在标题中。