C言語のu_int16とかって何なのよ。

Unix向けに書かれたC言語のプログラムで見るu_int8や、u_int16u_int32って型は何なのか。というお話。 そんな検索ワードで来てくださった方が居たようなので。

たとえばu_int16の場合、最初のu_unsignedであること = 0未満を扱わないことを、最後の1616bit分のサイズがあることを示しています。 u_を外してsignedになってマイナスを扱えるようになりますし、16の代わりに832にすると格納できる容量が変わります。

似たような型を並べてみると以下のようになります。

名前別名サイズ最小値最大値
unsigned charchar / u_int8 / uint8_t8bit0255
signed charint8 / int8_t8bit-128127
short intshort / int16_t16bit-32,76832,767
unsigned short intunsigned short / u_int16 / uint16_t16bit065,535
intsigned int32bit (※)-2,147,483,6482,147,483,647
unsigned intuint32bit (※)04,294,967,295
long intint32_t32bit-2,147,483,6482,147,483,647
unsigned long intu_int32 / uint32_t32bit04,294,967,295
long long intint64_t64bit-9,223,372,036,854,775,8089,223,372,036,854,775,807
unsigned long long intu_int64 / uint64_t64bit018,446,744,073,709,551,615

※ int / unsigned int はOSによってサイズが異なる場合があります。

ちなみに、Windowsだと__int8__int16__int32__int64もあります。 さらにはDWORD(符号なし32ビット)、WORD(符号なし16ビット)なども。 同じ型でもいろいろ呼び方があってややこしいですね。


参考: