【就プロ】C++の型と範囲
はじめに
競技プログラミングでは、「特定のテストケースに対して正しく出力が出てくるか」というブラックボックステストが行われ、全てのテストケースに正しく出力することで得点が加算されます。テストケースの入力の値の範囲は決められている場合が多く、型を正しく選択する必要があります。
整数型
型名 | バイト幅 | ビット幅 | 範囲 |
---|---|---|---|
short | 2 | 16 | -32768 ~ 32767 |
unsigned short | 2 | 16 | 0 ~ 65535 |
int | 4 | 32 | -2147483648 ~ 2147483647 |
unsigned int | 4 | 32 | 0 ~ 4294967295 |
long long | 8 | 64 | -9223372036854775808 ~ 9223372036854775807 |
unsigned long long | 8 | 64 | 0 ~ 18446744073709551615 |
longは32bit環境と64bit環境で範囲が異なるため、ここでは書いていません。
この値をこのまま覚えられる人はそれで構いませんが、基本的には、$ 10^8 $までの値であればintで扱うことができ、それ以上はlong longを使用しましょう。じこれを考えるのは面倒な方はメモリ効率は良くないですが、常にlong longを使用する方法もあります。
実数型
型名 | バイト幅 | ビット幅 | 範囲 |
---|---|---|---|
float | 4 | 32 | 1.17549e-38 ~ 3.40282e+38 |
double | 8 | 64 | 2.22507e-308 ~ 1.79769e+308 |
long double | 16 | 128 | 3.3621e-4932~1.18973e+4932 |
実数型も整数型と同様にオーダーさえ把握していればいいと思います。
プログラミングコンテストでは実数が答えとなるような問題はあまり出題されません。
文字型
型名 | バイト幅 | ビット幅 | 範囲 |
---|---|---|---|
char | 1 | b | -128~127 |
signed int | 1 | 8 | -128~127 |
unsigned int | 1 | 8 | 0~255 |
こちらはあまり覚える必要はないですね。というよりは覚えること自体が苦じゃありません。