unsigned long int
32ビットコンピューターで10桁の数字(1,000,000,000〜9,999,999,999)を保持できますか?
さらに、、、、、、、およびunsigned long int
の範囲は何long int
ですか?unsigned int
short int
short unsigned int
int
信頼できる最小範囲は次のとおりです。
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これは、いいえ、10桁の数字を格納するために信頼long int
できないことを意味します。ただし、long long int
C99ではCに、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の補数または符号の大きさの整数表現を可能にするように記述されています。サインイン。符号ビット1とすべての値ビット0の値が正当な値ではなくトラップ表現である場合、2の補数表現を持つこともできます。つまり、値-32,768を表すことができる必要int
はありません。
数値型のサイズはC++標準では定義されていませんが、最小サイズは定義されています。プラットフォーム上のサイズを確認する方法は、数値制限を使用することです
たとえば、intの最大値は次のように見つけることができます。
std::numeric_limits<int>::max();
コンピューターは10進数では機能しません。つまり、数値がメモリ内でどのように表されるかにより、最大値は2n -1の形式になります。たとえば、8ビット(1バイト)
0100 1000
1に設定された場合の右端のビット(数値)は2 0を表し、次のビットは2 1、次に2 2というように続き、左端のビットに到達します。これは、数値が符号なしの場合は27を表します。
したがって、右から4番目のビットと右から7番目のビットが設定されているため、数値は2 6 + 2 3 = 64 + 8=72を表します。
すべての値を1に設定した場合。
11111111
数値は(符号なしと仮定して)
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 2 8-1に
なります。ご覧のとおり、これは8ビットで表すことができる最大の値です。
私のマシンでは、intとlongは同じであり、それぞれが-23から231-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やprecisionsなどへのリンクを投稿
します。自分でそれを理解する方法を説明します。
次のことを行う小さなアプリを作成します。
unsigned int ui;
std::cout << sizeof(ui));
これは(コンパイラとアーキテクチャに応じて)2、4、または8を出力し、2バイト長、4バイト長などと言います。
4だとしましょう。
ここで、4バイトが格納できる最大値が必要です。1バイトの最大値は(16進数で)0xFFです。4バイトの最大値は0xの後に8つのfが続きます(各バイトに1組のfがあり、0xはコンパイラに次の文字列が16進数であることを通知します)。次に、プログラムを変更してその値を割り当て、結果を出力します
unsigned int ui = 0xFFFFFFFF;
std::cout << ui;
これは、unsigned intが保持できる最大値であり、10進数の表現で示されます。
次に、ロング、ショート、およびその他の興味のあるINTEGER値に対してこれを実行します。
注意:このアプローチは、浮動小数点数(つまり、doubleまたはfloat)では機能しません。
お役に立てれば
C ++では、intおよびその他のデータは2のcomplimentメソッドを使用して格納されるようになりました。つまり、範囲は次のとおりです。
-2147483648 to 2147483647
または-2^31から2^31-1
1ビットは0用に予約されているため、正の値は2 ^(31)より1小さい値です。
ヘッダーファイルにあるnumeric_limits<data_type>::min()
andnumeric_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
例えば
unsignedintサイズの場合=4バイト(32ビット)->範囲[0、(2 ^(32))-1]
符号付き整数サイズの場合=4バイト(32ビット)->範囲[-(2 ^(32-1))、(2 ^(32-1))-1]
いいえ、有効な範囲が0〜4,294,967,295のunsignedlongintに格納できるのは10桁の数値の一部のみです。これを参照できます:http: //msdn.microsoft.com/en-us/library/s3f49ktz (VS.80).aspx
特定のタイプのnumeric_limits<>テンプレートの特殊化を確認する必要があります。そのヘッダーにあります。
unsigned long intは、32ビットコンピューターで10桁の数値(1,000,000,000〜9,999,999,999)を保持できます。
いいえ