2015-02-12 123 views
4

一個測試題:(false - ~0)(false - NOT(0))等於1?

爲什麼(false - ~0)1?在32位機~011....11那裏有32 1位吧?然後false爲int轉換也是00....00也是32次吧?所以我們從32 中減去?它是否下溢,我們得到1?

+0

的std ::地圖<的std :: string,性病::向量<無符號長長>> – Narek 2015-02-12 06:54:04

+0

重新@thomasMacleod:你的問題是錯誤的 - 你從32'0' 32'-1'減去。 – 2015-02-12 06:59:19

+0

32'-1'is更多的天才則'是什麼類型「 - 」在這種情況下':d – Narek 2015-02-12 07:00:28

回答

9

0int~0int和平等-1false提升爲int,你→表達作爲(0 - (-1))相當於1計算導致爲零。

9

~0計算結果爲-1二進制補碼錶示。因此0 - -1等於1.

編輯: 要稍微精確些。一元~操作應用到文字0,這是一個int,是一個逐位的補操作。然後0的存儲器表示在32位體系結構中變爲0xffffffff。但是,結果仍然是int。由於所有流行的編譯器解釋的int內存中表示在補,~0評估爲-1

+0

只要我們認爲它已經簽署,它就成立。但是如果我們將〜0定義爲'unsigned int',它仍然會給出1 – Atul 2015-02-12 07:07:57

+0

@Atul,在C++中,文字'0'是一個帶符號的int。見ISO C++標準的2.14.2.2。 – ThomasMcLeod 2015-02-12 07:13:19

+0

那麼即使我們這樣做:'unsigned int zeros = 0; unsigned int ones = 0xFFFFFFFF; unsigned int answer = 0;'still'answer'hold value 1 – Atul 2015-02-12 07:16:29