質問
私はこのunsigned
「型なし」タイプは、数回使用しますが、それについての説明を見たことがない見てきました。私は、対応するsigned
タイプがありますと仮定します。ここでは例があります:
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
next = seed;
}
私がこれまでに収集したもの:
- 私のシステムで、sizeof(unsigned) = 4
(32ビットunsigned int型のヒント)
- それは符号なしのバージョンに別のタイプのキャストの省略形として使用される可能性があります:
signed long int i = -42;
printf("%u\n", (unsigned)i);
このANSI C、または単にコンパイラの拡張機能ですか?
解決
unsigned
は本当にunsigned int
の短縮形であり、従って、標準Cで定義されます。
他のヒント
unsigned
はunsigned int
を意味します。 signed
はsigned int
を意味します。ただunsigned
を使用すると、これはANSIです。
unsigned int
を宣言する怠惰な方法です。 歴史的にCで、想定されました。だから、「符号なし」は「unsigned int型」の省略形です。これは、長い時間のために悪い習慣と考えられてきたが、それを使用してそこにコードのかなりの量が依然として存在します。
Cにおいて、unsigned
はunsigned int
のショートカットである。
あなたはlong
long int
に同じを持っています
そして、(それがunsigned long
になります)unsigned long int
を宣言することも可能です。
これはANSI標準である
CとC ++では
unsigned = unsigned int (Integer type)
signed = signed int (Integer type)
nビットを含む符号なし整数0との間の値を持つことができ (2 ^ N-1)、2 ^ n個の異なる値である。
符号なし整数が正またはゼロのいずれかである。
符号付き整数は2の補数を使用してコンピュータに保存されます。
別の質問するからの私のの答えを持ち込みます。
C指定するから、セクション6.7.2ます:
- 符号なし、またはunsigned int型
unsigned
は、タイプを指定していないとき、unsigned int
するデフォルトのものとすることを意味。だから、書くunsigned a
がunsigned int a
と同じである。
C17 6.7.2§2によるます:
型指定子の各リストは、次のマルチセット(項目ごとに複数の多重集合がある場合、カンマで区切られた)のいずれかでなければなりません。型指定は任意の順序で発生することがあり、場合によっては他の宣言指定子と混在
- 無効
- 文字
- signed char型の
- unsigned char型
- 短い、署名短い、短いint型、または符号付きshort int型の
- unsigned short型、またはunsigned short int型の
- int型、署名、またはint型の
を締結 - 符号なし、またはunsigned int型
- int型
長い、長い、長いint型に署名し、又は長期署名 - 符号なしlong、またはunsigned long int型
- 長い長い、長い長い長い長いint型に署名し、または符号付きlong long int型
- 符号なしの長い長い、または符号なしlong long int型
- フロート
- ダブル
- 長い二
- _Bool
- フロート_Complex
- ダブル_Complex
- 長い二_Complex
- アトミック型指定子
- structまたはunion指定子
- 列挙指定子
- のtypedef名
だから、unsigned int
の場合には、我々はunsigned
またはunsigned int
を書くことができるか、私たちは狂気、int unsigned
を感じている場合。標準以来、後者は「...おそらく混ぜ、任意の順序で行うことができる」ように十分に愚かです。これは、言語の既知の欠陥である。
適切なCコードはunsigned int
を使用します。