2009-07-23 5 views
63

私はこれを見ました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ビット符号なし整数のヒント)
を - それは別の型を鋳造するための省略形として使用されるかもしれません署名されていないバージョン:

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

これはANSI Cですか、それともコンパイラ拡張ですか?

答えて

110

unsignedは本当にunsigned intの省略形です、そしてその標準Cで定義された

23

unsignedunsigned intを意味します。 signedsigned intを意味します。 unsignedを使用するのは、Cでunsigned intと宣言する怠惰な方法です。これはANSIです。

6

(C)unsignedunsigned intのショートカットです。

あなたはlong int

のショートカットであり、(それがunsigned long intになります)unsigned longを宣言することも可能であるlongに同じを持っています。あなたは「INT」が仮定されたデータ型を省略した場合

これは、Cで歴史的にANSIで標準

+0

はい。 'unsigned'は' unsigned int'と同じですが、_WG14/N1124委員会ドラフト - 2005年5月6日に検索しましたISO/IEC 9899:TC2_ for 'unsigned'が見つかりました。それが定義されている部分を引用しますか? – user454322

11

です。だから "unsigned"は "unsigned int"の省略形です。これは長い間悪い習慣とみなされてきましたが、それを使用するかなりの量のコードが残っています。 Cにおいて

+6

私はそれが悪い習慣であることを知らなかった。これには根拠がありますか? 'long int'ではなく' long'が非常に一般的なので、 'unsigned int'ではなく' unsigned'がなぜ受け入れられないのか分かりません。 –

+10

@Charles Bailey:最近、あなたが正式ではなく実用的であるならば、長さ、int、short、charは、異なるサイズになる可能性があるため、異なるデータ型とみなされます。修飾子。したがって、あなたは "unsigned long"または "unsigned char"を使用するのと同じ方法で "unsigned int"を使用する傾向があります(intを見逃していないことを明確にします)。 「long int」または「short int」のintは余分です。 – Dipstick

+1

@Dipstick、 "long"は "int"の修飾子です。 "unsigned int"のintのように見えますが、 "unsigned long int"のintほど余計です。 –

3

及びC++

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

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

符号なし整数は正またはゼロのいずれかです。

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

0

私はanswer from another questionを持って来ます。 C specificationから

、セクション6.7.2:

- 符号なし、またはタイプを指定していないとき、unsigned intにデフォルト設定されなければならunsigned、という意味

int型符号なし。したがって、unsigned aを書くことはunsigned int aと同じです。