2010-08-05 71 views

回答

15

平原int相同signed相同signed int

+0

一些(全部?)編譯器有一個開關來將默認值更改爲無符號。在MSVC中,它是/ J。 – 2010-08-05 11:43:54

+1

供參考默認情況下,Microchip PIC控制器的CCS編譯器未經簽名。哎呀! – kenny 2010-08-05 11:45:54

+9

/J編譯器開關影響char,而不是int。 「char」可能會或可能不會被簽名。 「char」,「signed char」和「unsigned char」總是不同的類型,不管是否有「char」被簽名。 – 2010-08-05 11:47:37

2

int S按默認簽名。

12

C++標準3.9.1/2:

有四個符號整型:「長整型」,「符號字符」,「短整型」,「INT」,和< ...>

C++標準3.9.1/3:

對於每個符號整數類型,有Ë xists相應的(但不同無符號整型: 「無符號字符」,「無符號短整型」,「無符號整型」和「無符號長 整型,」 < ...>

因此,sizeof(int)等於sizeof(unsigned)。但boost::is_same< int, unsigned >::value是錯誤的。

+1

+1引用標準。 – Cumbayah 2010-08-05 12:13:10

1

signed intint相同,並指定可以同時具有正值和負值的整數值。

unsigned int另一方面只能有正值,所以最大正值遠大於signed int

+0

實際上,*範圍*的值是完全相同的大小,它只是移位,所以最小值爲0. – 2010-08-05 11:45:03

+0

你說得對,那是一個糟糕的選擇。固定;) – 2010-08-05 12:10:44

3

ints是默認簽名的,與longs一樣。

所以,int,signedsigned int是一樣的東西。

類似地longsigned long是相同的。

chars另一方面,沒有默認值。實現可以認爲它們是有符號或無符號的(許多命令行開關可供選擇)。 char,signed charunsigned char被認爲是重載決議,模板實例和其他地方的三種不同類型。

+0

最後一句太受限制了。這不僅僅是重載解決方案,它無處不在。例如。也作爲模板參數。因此,'std :: vector '與'std :: vector '是相同的類型,但是'std :: vector '不是**與'std :: vector ' – MSalters 2010-08-05 12:24:45

+0

@MSalters相同的類型:好點,更新。 – 2010-08-05 13:49:49

相關問題