90

unsigned long int32ビットコンピューターで10桁の数字(1,000,000,000〜9,999,999,999)を保持できますか?

さらに、、、、、、、およびunsigned long intの範囲は何long intですか?unsigned intshort intshort unsigned intint

4

10 に答える 10

148

信頼できる最小範囲は次のとおりです。

  • 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

これは、いいえ、10桁の数字を格納するために信頼long int できないことを意味します。ただし、long long intC99ではCに、C ++11ではC++に、より大きな型が導入されました(この型は、それを含まない古い標準用に構築されたコンパイラによって拡張機能としてサポートされることもよくあります)。コンパイラがサポートしている場合、このタイプの最小範囲は次のとおりです。

  • 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

そのため、そのタイプは十分に大きくなります(ここでも、使用可能な場合)。


私がこれらの下限を間違えたと信じている人への注意:範囲のC要件は、最小の表現可能な値と最高の表現可能な値のみが異なる、1の補数または符号の大きさの整数表現を可能にするように記述されています。サインイン。符号ビット1とすべての値ビット0の値が正当な値ではなくトラップ表現である場合、2の補数表現を持つこともできます。つまり、値-32,768を表すことができる必要intはありません。

于 2009-11-30T11:20:40.560 に答える
35

数値型のサイズは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ビットデスクトップマシンで最も一般的なサイズです。

于 2009-11-30T11:16:40.210 に答える
16

システムの制限を確認するに

#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でのみ有効であることに注意してください。

于 2013-07-24T02:43:45.920 に答える
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)では機能しません。

お役に立てれば

于 2009-11-30T11:22:43.323 に答える
9

C ++では、intおよびその他のデータは2のcomplimentメソッドを使用して格納されるようになりました。つまり、範囲は次のとおりです。

-2147483648 to 2147483647

または-2^31から2^31-1

1ビットは0用に予約されているため、正の値は2 ^(31)より1小さい値です。

于 2015-09-21T06:24:47.917 に答える
7

ヘッダーファイルにある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;
}

出力は次のようになります。データ型の制限:

  • char:-128〜127
  • unsigned char:0〜255
  • 短い:-32768〜32767
  • unsigned short:0〜65535
  • int:-2147483648〜2147483647
  • unsigned int:0〜4294967295
  • 長い:-2147483648〜2147483647
  • unsigned long:0〜4294967295
  • 長い長い:-9223372036854775808から9223372036854775807
  • unsigned long long:0〜18446744073709551615
  • フロート:1.17549e-038から3.40282e + 038
  • ダブル:2.22507e-308から1.79769e + 308
  • ロングダブル:3.3621e-4932〜1.18973e + 4932
于 2019-12-13T08:33:25.040 に答える
3

符号なしデータ型の場合、符号ビットはなく、すべてのビットはデータ用です。一方、符号付きデータタイプの場合、 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]

于 2009-11-30T12:08:24.017 に答える
1

いいえ、有効な範囲が0〜4,294,967,295のunsignedlongintに格納できるのは10桁の数値の一部のみです。これを参照できます:http: //msdn.microsoft.com/en-us/library/s3f49ktz (VS.80).aspx

于 2009-11-30T11:18:54.110 に答える
0

特定のタイプのnumeric_limits<>テンプレートの特殊化を確認する必要があります。そのヘッダーにあります。

于 2009-11-30T11:15:56.327 に答える
0

unsigned long intは、32ビットコンピューターで10桁の数値(1,000,000,000〜9,999,999,999)を保持できます。

いいえ

于 2009-11-30T11:16:59.647 に答える