以下は目次です。
たとえば、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;
("%u\n", a);
printf("%hhu\n", b);
printf("%llu\n", c);
printf}
実行結果:
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 | limits.h |
unsigned short | USHRT_MAX | limits.h |
unsigned int | UINT_MAX | limits.h |
unsigned long | ULONG_MAX | limits.h |
unsigned long long | ULLONG_MAX | limits.h |
size_t | SIZE_MAX | 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;
("%u\n", a);
printf("%hhu\n", b);
printf("%llu\n", c);
printf}
実行結果:
4294967295
255
18446744073709551615
return 0;
を削除(C言語編全体でのコードの統一)
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |