C ++中整数types存储的值的范围
在32位计算机上, unsigned long int
保存十位数字(1,000,000,000 – 9,999,999,999)吗?
另外, unsigned long int
, long int
, unsigned int
, short int
, short unsigned int
和int
多less?
您可以依赖的最小范围是:
-
short int
和int
:-32,767至32,767 -
unsigned short int
和unsigned 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 <>模板的特化。 它在头上。