每次我使用unsigned
關鍵字時,它一直在int
之前,或其他內置類型。 我想知道是否有其他方式unsigned
可以使用。可以用非明顯的方式使用unsigned關鍵字嗎?
- 用戶定義的類型(類/結構)可以使用
unsigned
關鍵字嗎? - 模板可以特別用於
unsigned
嗎?
如果不是,爲什麼它有自己的關鍵字?爲什麼是unsigned int
而不是uint
?
每次我使用unsigned
關鍵字時,它一直在int
之前,或其他內置類型。 我想知道是否有其他方式unsigned
可以使用。可以用非明顯的方式使用unsigned關鍵字嗎?
unsigned
關鍵字嗎?unsigned
嗎?如果不是,爲什麼它有自己的關鍵字?爲什麼是unsigned int
而不是uint
?
不,它不能用於類或結構體,因爲它們不是整型。所有的模板可以做的是使一個int無符號。我認爲它被選爲一個單獨的關鍵字,因爲它可以應用於任何整數類型(char,int,long,long long),從而實現一個關鍵字需要四個以上的關鍵字。它的含義也立即明顯,而uint,uchar等不一定。並且請記住它也可以在沒有限定符的情況下使用,在這種情況下,假定爲unsigned int。
數字是錯誤的,實際上你應該說整數類型。 – 2011-10-12 17:13:15
更準確地說,內置的整型類型。 BigInt是一個完整的類型。 –
@ 0A0D:從技術上來說,是的,但我特別使用了「數字」這個詞來強調只有數字類型才能具有符號質量的事實。 –
沒有unsigned並不是真正的關鍵字;它只是int,short,char的修飾符。
unsigned
的關鍵字可被用作一個改性劑int
,short
,char
,或long
。它也可以作爲一個類型名稱使用; unsigned
意味着unsigned int
。
這樣做是爲了避免使用三個額外的關鍵字uint ushort uchar,並且因爲C和Unix所針對的所有早期計算機上的signed/unsigned可能都沒有不同。
好吧,實際上它是一個「類型說明符」而不是「修飾符」。見C++ ISO標準中的7.1.5。 – 2011-10-12 17:12:50
看到這個[鏈接](http://en.cppreference.com/w/cpp/keywords/unsigned) – COD3BOY
@Sanjay:我不在乎那是什麼說的,去閱讀7.1.5中的ISO標準。 http://www-d0.fnal.gov/~dladams/cxx_standard.pdf – 2011-10-12 17:16:19
unsigned
是一個關鍵字。 unsigned
只能用於積分類型。 unsigned
或signed
被認爲是一個類型說明符,一個簡單的類型說明符。所以他們指定該類型將通過簽名或未簽名。
可以typedef
的話unsigned int
到uint
但隨後這將使它看起來像一個類型時int
是類型和unsigned
是類型說明符本身。
您可以使用自己unsigned
,流行的看法相反,如C++ ISO標準7.1.5.2節表7證實:
您可以使用多個類型說明符(時只允許),並且可以以任意順序與decl-specifiers自由混合。
你也可以這樣做:
int unsigned i;
,這是合法的C++。
關鍵字signed,unsigned,short和long是類型修飾符/說明符,並且當其中一個類型修飾符/說明符本身被使用時,會假定爲int的數據類型。
所以有符號和無符號也可以是used as standalone type specifiers
,分別與signed int和unsigned int相同。下面兩個聲明是等效的:
unsigned abc;
unsigned int abc;
主要問題已回答幾次:所述unsigned
關鍵字僅能用作類型說明符爲一個整數類型。
至於爲什麼unsigned
是一個單獨的關鍵字,而不是具有uint
關鍵字,其原因是歷史的。
C的最早版本(預-K & R)只有四個基本類型:
char
(8比特,簽名,二進制補碼)int
(16比特,符號,2的-complement)float
(32位)double
(64比特,相同的範圍內float
但更大的精度)注意缺少了什麼:沒有signed
或unsigned
關鍵字,沒有short
,long
,或long double
;所有這些都是後來添加的。 (需要無符號算術的程序員常用指針,可與int
自由互換。)
每個基本類型的名稱都是單個關鍵字,這使得語法變得非常簡單。
當其他類型的後來補充說,這是有意義的像unsigned
,short
,並long
添加符到現有的類型名稱,而不是引入新的關鍵字(這可能會打破現有的代碼)。當ANSI C委員會在1989年對語言進行標準化時,他們必須在現有的不太正式的定義之外製定一個連貫的結構,同時保持與現有的實施一致。結果是我們現在擁有的,其中int long unsigned long
是一個有效的類型名稱(更常見地寫爲unsigned long long
)。
如果語言是從頭開始設計的,我懷疑會採取不同的方法。也許每種基本類型都會有一個關鍵字(例如C#採用的方法),或者基本類型名稱可能會使用更一致的方案,而不是混雜的關鍵字(例如,int:2
爲2個字節整數,unsigned:4
爲一個4字節的無符號整數)。但是C和C++都堅持使用當前的方法。
還有無符號的字符。一些編譯器,比如GNU的g ++,可以讓你把無符號和假設你的意思是unsigned int。例如下面的代碼是等效的
unsigned int x;
unsigned x;
除非你的意思是使用'unsigned'本身(相當於'unsigned int'),我想不出任何其他*奇怪的用例。 –
這個問題的標題和文中的最後一個問題是完全不同的。哪一個? – Jon
我一直希望我可以使用'unsint'和'bigint'類。 –