2009-07-23 122 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

unsigned裝置unsigned intsigned表示signed int。僅僅使用unsigned就是在C中聲明unsigned int的懶惰方式。是的,這是ANSI。

6

in C,unsignedunsigned int的快捷方式。

您有long同樣是對long int

一個快捷方式,還可以申報unsigned long(這將是一個unsigned long int)。

這是ANSI標準

用C
+0

是的。 `unsigned`和`unsigned int`是一樣的,但是我在`_WG14/N1124委員會草案 - 2005年5月6日'上搜索了'unsigned`的ISO/IEC 9899:TC2_,並且找不到定義的地方......可以嗎?引用它定義的部分? – user454322 2014-05-22 05:23:25

11

從歷史上看,如果你省略了數據類型「INT」假設。所以「unsigned」是「unsigned int」的縮寫。這已經被認爲是很糟糕的做法很長一段時間,但仍然有相當數量的代碼使用它。

+6

我不知道這是不好的做法。這是否有理由? `long`而不是`long int`非常常見,所以我不確定爲什麼'unsigned`而不是`unsigned int`不能被接受。 – 2009-07-23 19:41:52

3

在C和C++

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

含有n個比特可以具有0和 (2^N-1)之間的值的無符號整數,其值爲2^n個不同的值。

一個無符號整數是正數或零。

帶符號整數存儲在計算機中使用2的補碼。

0

把我的answer from another question

C specification,第6.7.2節:

- 無符號,或無符號整型

意思就是說unsigned,如果未指定類型,將默認爲unsigned int。所以編寫unsigned aunsigned int a相同。

相關問題