C ++中整数types存储的值的范围

在32位计算机上, unsigned long int保存十位数字(1,000,000,000 – 9,999,999,999)吗?

另外, unsigned long intlong intunsigned intshort intshort unsigned intint多less?

您可以依赖的最小范围是:

  • short intint :-32,767至32,767
  • unsigned short intunsigned int :0到65,535
  • long int :-2,147,483,647至2,147,483,647
  • unsigned long int :0到4,294,967,295

这意味着不能用long int来存储任何10位数字。 然而,C99和C ++在C ++ 11中引入了一个更长types的long long int (这种types也经常被作为针对较旧标准的编译器的扩展而被支持)。 这种types的最小范围(如果你的编译器支持的话)是:

  • long long int仓:-9,223,372,036,854,775,807至9,223,372,036,854,775,807
  • unsigned long long int :0至18,446,744,073,709,551,615

所以这种types将是足够大(再次, 如果你有它可用)。


对于那些认为我在这些下界犯了错误的人来说,我没有。 对范围的C要求被写成允许1的补码或符号幅度整数表示,其中最低可表示值和最高可表示值仅在符号上不同。 也允许有补码表示法,其中符号位1和所有值位0的值是陷阱表示而不是合法值。 换句话说, int 不一定要能够表示值-32,768。

数字types的大小没有在C ++标准中定义,尽pipe最小的大小是。 告诉他们在你的平台上有多大的方法是使用数字限制

例如,int的最大值可以通过以下方式find:

 std::numeric_limits<int>::max(); 

计算机不能以10为基数工作,这意味着最大值将以2 n -1的forms出现,这是因为内存中数字的表示方式。 以八位(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位台式机上最常见的大小。

这里的其他人将链接到data_sizes和精度等。
我要告诉你如何弄清楚自己。
写一个小应用程序,将执行以下操作。

 unsigned int ui; std::cout << sizeof(ui)); 

这将(根据编译器和archicture)打印2,4或8,说2个字节长,4个字节长等。

让我们假设它是4。

你现在想要的最大值可以存储4个字节,一个字节的最大值是(hex)0xFF。 四个字节的最大值是0x,接着是8f(每个字节一对f,0x告诉编译器下面的string是hex数)。 现在改变你的程序来分配这个值并打印结果

 unsigned int ui = 0xFFFFFFFF; std::cout << ui; 

这是一个无符号整数可以容纳的最大值,以10为底数表示。

现在就这样做好久了,短裤和任何其他INTEGER值你好奇。

注意:这种方法不适用于浮点数(即double或float)。

希望这可以帮助

要找出您的系统上的限制:

 #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中只是合法的。

对于无符号数据types ,没有符号位,所有位都是数据; 而对于有符号数据types, MSB表示符号位,其余位表示数据。

要find范围做以下事情:

步骤:1 – >找出给定数据types的字节数。

步骤:2 – >应用下面的计算。

  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位) – >范围[0,(2 ^(32)) – 1]

对于signed int size = 4字节(32位) – >范围[ – (2 ^(32-1)),(2 ^(32-1)) – 1]

在C ++中,现在int和其他数据是使用2的恭维方法存储的。 这意味着范围是:

 -2147483648 to 2147483647 

或-2 ^ 31到2 ^ 31-1

1位保留为0,所以正值小于2 ^(31)

不可以,只有十位数的一部分可以存储在一个无符号的长整型,其有效范围是0到4,294,967,295。 你可以参考这个: http : //msdn.microsoft.com/en-us/library/s3f49ktz(VS.80).aspx

可以在32位计算机上使用unsigned long int保存十位数字(1,000,000,000 – 9,999,999,999)。

没有

您应该查看给定types的numeric_limits <>模板的特化。 它在头上。