2012-08-18 131 views
0

的C++入門的說:在類型文字,無符號負數

我們可以獨立指定signedees和整體 文字的大小。如果後綴包含U,則文字具有無符號的 類型,因此具有U後綴的十進制,八進制或十六進制文字具有最小類型的無符號整數 ,無符號長整型或無符號長整型 ,其中文字的值符合

當一個聲明

int i = -12U;

方式我明白它是-12轉化成unsigned版本的本身(4294967284),然後分配給int,由於翻滾而產生非常大的正數。

這似乎沒有發生。請問我錯過了什麼?

cout << i << endl; // -12

回答

2

您分配unsigned int的回符號整數,所以它被再次轉換。

這就像你這樣做:

int i = (int)(unsigned int)(-12); 
+0

沒錯。所以-12U變成4294967284,那麼應該把4294967284分配給一個int。這不是它發生的情況嗎? – JAM 2012-08-18 16:46:07

+0

4294967284太大而無法放入int,因此它迴繞到負值。 – 2012-08-18 16:46:47

+0

哦,我明白了,有道理。謝謝Vaughn! – JAM 2012-08-18 16:47:23

1

u有效地結合比-更加緊密。你得到-(12u)

+0

那麼,如果它不影響字面量(在這個例子中恰好是負值),那麼'U'的意義是什麼? – JAM 2012-08-18 16:45:03

+1

Upvoted! @Jam摘自[這裏](http://en.cppreference.com/w/cpp/language/integer_literal):沒有負整數文字。諸如「-1」的表達式將一元減運算符應用於文字表示的值,這可能涉及隱式類型轉換。 – legends2k 2015-08-19 06:36:29

1

12具有int類型和值12。

12U的類型是unsigned int和值12。

-12U具有unsigned int類型和值std::numeric_limits<unsigned int>::max() + 1 - 12.

int i = -12U;應用實現定義的轉換將-12U轉換爲int類型。

+0

換句話說,'2^n - literal'其中n是文字類型的位寬。因此,在32位「int」的機器上,「-12U」是2^32 - 12 = 4294967284。 – legends2k 2015-08-19 06:58:12

相關問題