可以unsigned long int
在32位计算机上保留十位数字(1,000,000,000-9,999,999,999)吗?
此外,有什么的范围unsigned long int
,long int
,unsigned int
,short int
,short unsigned int
,和int
?
Answers:
您可以依赖的最小范围是:
short int
和int
:-32,767至32,767unsigned short int
和unsigned int
:0至65,535long int
:-2,147,483,647至2,147,483,647unsigned long int
:0至4,294,967,295这意味着不可以,long int
不能依靠它来存储任何10位数字。但是,long long int
C99和C ++ 11中的C ++引入了更大的类型(为不包含它的较早标准构建的编译器通常也将这种类型作为扩展来支持)。如果编译器支持,则此类型的最小范围是:
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。
int
意味着long int
。
尽管最小大小是,但是C ++标准中没有定义数字类型的大小。判断它们在平台上的大小的方法是使用数字限制
例如,可以通过以下方式找到int的最大值:
std::numeric_limits<int>::max();
计算机不能在10进制下工作,这意味着最大值将以2 n -1的形式出现,因为内存中的数字表示方式如何。以八位(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和很长的都一样,每个能够-2之间保持31 2 31 - 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和precision等的链接。
我将告诉您如何自己解决问题。
编写一个可以执行以下操作的小应用程序。
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;
多数民众赞成在一个无符号的int可以持有的最大值,以10为基础的表示形式。
现在,您可以做多头,短裤和您感兴趣的任何其他INTEGER值。
注意:此方法不适用于浮点数(即双精度或浮点型)。
希望这可以帮助
在C ++中,现在使用2的补码方法存储int和其他数据。这意味着范围是:
-2147483648 to 2147483647
或-2 ^ 31至2 ^ 31-1
1位保留为0,因此正值小于2 ^(31)
您可以使用头文件中的numeric_limits<data_type>::min()
和numeric_limits<data_type>::max()
函数来limits
查找每种数据类型的限制。
#include <iostream>
#include <limits>
using namespace std;
int main()
{
cout<<"Limits of Data types:\n";
cout<<"char\t\t\t: "<<static_cast<int>(numeric_limits<char>::min())<<" to "<<static_cast<int>(numeric_limits<char>::max())<<endl;
cout<<"unsigned char\t\t: "<<static_cast<int>(numeric_limits<unsigned char>::min())<<" to "<<static_cast<int>(numeric_limits<unsigned char>::max())<<endl;
cout<<"short\t\t\t: "<<numeric_limits<short>::min()<<" to "<<numeric_limits<short>::max()<<endl;
cout<<"unsigned short\t\t: "<<numeric_limits<unsigned short>::min()<<" to "<<numeric_limits<unsigned short>::max()<<endl;
cout<<"int\t\t\t: "<<numeric_limits<int>::min()<<" to "<<numeric_limits<int>::max()<<endl;
cout<<"unsigned int\t\t: "<<numeric_limits<unsigned int>::min()<<" to "<<numeric_limits<unsigned int>::max()<<endl;
cout<<"long\t\t\t: "<<numeric_limits<long>::min()<<" to "<<numeric_limits<long>::max()<<endl;
cout<<"unsigned long\t\t: "<<numeric_limits<unsigned long>::min()<<" to "<<numeric_limits<unsigned long>::max()<<endl;
cout<<"long long\t\t: "<<numeric_limits<long long>::min()<<" to "<<numeric_limits<long long>::max()<<endl;
cout<<"unsiged long long\t: "<<numeric_limits<unsigned long long>::min()<<" to "<<numeric_limits<unsigned long long>::max()<<endl;
cout<<"float\t\t\t: "<<numeric_limits<float>::min()<<" to "<<numeric_limits<float>::max()<<endl;
cout<<"double\t\t\t: "<<numeric_limits<double>::min()<<" to "<<numeric_limits<double>::max()<<endl;
cout<<"long double\t\t: "<<numeric_limits<long double>::min()<<" to "<<numeric_limits<long double>::max()<<endl;
}
输出将是:数据类型的限制:
对于无符号数据类型,没有符号位,所有位都用于数据; 而对于有符号数据类型, MSB表示符号位,其余位用于数据。
要查找范围,请执行以下操作:
步骤1->查找给定数据类型的字节数。
步骤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]
对于有符号的int大小= 4字节(32位)->范围[-(2 ^(32-1)),(2 ^(32-1))-1]
不可以,十位数字的一部分只能存储在一个无符号long int中,其有效范围是0到4,294,967,295。您可以参考以下网址:http : //msdn.microsoft.com/zh-cn/library/s3f49ktz(VS.80).aspx