このページの解説は C99 をベースとしています。
以下は目次です。
ある符号無し整数型📘で表現できる最大値を使いたいとします。
たとえば、unsigned int型の変数を定義するとき、表現できる最大値で初期化したい場合、どのように書けるでしょうか。
unsigned int a = ???;-1 を与えるのが簡単です。
#include <stdio.h>
int main(void)
{
unsigned int a = -1;
unsigned char b = -1;
unsigned long long c = -1;
printf("%u\n", a);
printf("%hhu\n", b);
printf("%llu\n", c);
}実行結果:
4294967295
255
18446744073709551615
-1 は負数ですから、符号無し整数型では表現できません。C言語の型変換📘のルールでは、負数を符号無し整数型に変換するときには、表現できる数になるまで、2N を加算し続けることになっています(第19章)。N は変換後の型のビット数です。
unsigned int型が 32ビットだとすると、表現できない -1 という数に、232 を加算します。この結果は、unsigned int型で表現できる最大値と一致します。
符号無し整数型の大きさが何ビットであっても、N の部分が自動的に判断されますから、つねに正しく、最大値を得られます。
符号無し整数型の最大値を定義したマクロが、標準ライブラリに用意されていますから、それを使う方法もあります。
これらのマクロは limits.h で定義されています。また、size_t型のようなほかの符号無し整数型については stdint.h で定義されています。
すべてではありませんが、代表的なものを以下に挙げます。
| 型 | マクロ | ヘッダ |
|---|---|---|
| unsigned char | [UCHAR_MAX](../appendix | /reference/UCHAR_MAX.html “リファレンス”) limits.h |
| unsigned short | [USHRT_MAX](../appendix | /reference/USHRT_MAX.html “リファレンス”) limits.h |
| unsigned int | [UINT_MAX](../appendix/ | reference/UINT_MAX.html “リファレンス”) limits.h |
| unsigned long | [ULONG_MAX](../appendix | /reference/ULONG_MAX.html “リファレンス”) limits.h |
| unsigned long long | [ULLONG_MAX](../appendi | x/reference/ULLONG_MAX.html “リファレンス”) limits.h |
| size_t | [SIZE_MAX](../appendix/ | reference/SIZE_MAX.html “リファレンス”) stdint.h |
#include <limits.h>
#include <stdio.h>
int main(void)
{
unsigned int a = UINT_MAX;
unsigned char b = UCHAR_MAX;
unsigned long long c = ULLONG_MAX;
printf("%u\n", a);
printf("%hhu\n", b);
printf("%llu\n", c);
}実行結果:
4294967295
255
18446744073709551615
return 0; を削除(C言語編全体でのコードの統一)
Programming Place Plus のトップページへ
| はてなブックマーク に保存 | Facebook でシェア | X で ポスト/フォロー |
| LINE で送る | noteで書く |
|
| 管理者情報 | プライバシーポリシー |