100

この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 を示唆しています)
- 別の型を unsigned バージョンにキャストするための省略形として使用される可能性があります:

signed long int i = -42;
printf("%u\n", (unsigned)i);

これは ANSI C ですか、それとも単なるコンパイラの拡張機能ですか?

4

7 に答える 7

160

unsignedreally は の省略形でunsigned intあり、標準 C でそのように定義されています。

于 2009-07-23T13:46:39.117 に答える
39

unsignedを意味しunsigned intます。 signedを意味しsigned intます。just を使用するのは、Cunsignedで an を宣言する怠惰な方法ですunsigned int。はい、これは ANSI です。

于 2009-07-23T13:48:33.873 に答える
19

歴史的に C では、データ型を省略した場合、"int" が想定されていました。したがって、「unsigned」は「unsigned int」の省略形です。これは長い間悪い習慣と見なされてきましたが、まだかなりの量のコードで使用されています。

于 2009-07-23T13:49:31.500 に答える
10

C ではunsigned、 のショートカットですunsigned int

あなたは同じものを持っています。longそれはのショートカットですlong int

また、 a を宣言することも可能ですunsigned long( a になりますunsigned long int)。

これはANSI標準にある

于 2009-07-23T13:49:27.710 に答える
5

C および C++ の場合

unsigned = unsigned int (Integer type)
signed   = signed int (Integer type)

n ビットを含む符号なし整数は、0 と (2^n-1) の間の値を持つことができます。これは 2^n の異なる値です。

符号なし整数は、正またはゼロです。

符号付き整数は、2 の補数を使用してコンピューターに格納されます。

于 2015-02-04T06:51:54.617 に答える
1

別の質問から私の答えを導きます。

C仕様から、セクション6.7.2:

— unsigned、または unsigned int

つまりunsigned、タイプが指定されていない場合、デフォルトは になります unsigned int。したがって、書き込みunsigned aは と同じunsigned int aです。

于 2017-01-04T19:27:55.337 に答える