[C++] Fundamental types


この文章はint,short,long,charなどの基礎タイプをまとめたものである.64ビットオペレーティングシステムを対象として,コア要素のみを整理する.
データモデル
データモデルによってタイプのビット数が異なります.また、データモデルは「コンパイラ駆動オペレーティングシステム」に依存します.理解すべき事項は以下の通りです.
Windows 64ビットはLP 64、Linux 64ビットはLP 64を使用します.
LongタイプのサイズLP 64は32ビット、LP 64は64ビットである.
そこまであるだろう他のタイプではよく知られています.
だからこれはどんな影響がありますか?百聞は一見にしかず,自分でやってみる
Powershellとwsl(Linux)で次のコードをテストしました.
#include<bits/stdc++.h>

int main(){
  std::cout << sizeof(int)<<'\n';
  std::cout << sizeof(long) << '\n';
  std::cout << sizeof(long long) << '\n';
}

powershell
4
4
8
./a.exeを実行すると、2行目のlongタイプが4バイトであることがわかります.
wsl
4
8
8
./a.outを実行すると、2行目の長いタイプが8バイトであることがわかります.そしてさっき作った...a.exeを実行すると、powershellと同じ結果が表示されます.これは、コンパイラがどのデータモデルを使用するかを決定し、コンパイルされたオペレーティングシステムにターゲットを設定することを意味します.
表示範囲(ビットサイズ)
ビットサイズが分かったので、その表現範囲を見てみましょう.念のため、他のタイプのビットサイズをメモします.
charshortinglongfloat double 8163232または64643264
表示される範囲は通常近似値しか知らず、実行される値は以下のように#includeと書きます.
#include<limits>
int max = INT_MAX;
int min = INT_MIN;
long long llmax = LLONG_MAX
他のマクロはここへ行きます。を見ることができます.
ビットサイズの整数範囲
signed
8(char)16(short)32(int)64(longlong)-128~127± 3.27 · 10^4± 2.14 · 10^9± 9.22 · 10^18
unsigned
8(char)16(short)32(int)64(longlong)0~2556.55 · 10^44.29 · 10^91.84 · 10^19
ビットサイズの浮動小数点範囲
32(float)64(double)±3.4 · 10^38±1.79 · 10^308
参考文献
https://en.cppreference.com/w/cpp/language/types
https://stackoverflow.com/questions/49311731/force-lp64-data-model-with-gcc-or-clang-in-windows