一個測試題:(false - ~0)
(false - NOT(0))等於1?
爲什麼(false - ~0)
是1
?在32位機~0
是11....11
那裏有32 1
位吧?然後false爲int轉換也是00....00
也是32次吧?所以我們從32 中減去?它是否下溢,我們得到1?
一個測試題:(false - ~0)
(false - NOT(0))等於1?
爲什麼(false - ~0)
是1
?在32位機~0
是11....11
那裏有32 1
位吧?然後false爲int轉換也是00....00
也是32次吧?所以我們從32 中減去?它是否下溢,我們得到1?
0
是int
→~0
是int
和平等-1
→false
提升爲int
,你→表達作爲(0 - (-1))
相當於1
計算導致爲零。
~0
計算結果爲-1二進制補碼錶示。因此0 - -1等於1.
編輯: 要稍微精確些。一元~
操作應用到文字0
,這是一個int
,是一個逐位的補操作。然後0
的存儲器表示在32位體系結構中變爲0xffffffff
。但是,結果仍然是int
。由於所有流行的編譯器解釋的int
內存中表示在補,~0
評估爲-1
。
只要我們認爲它已經簽署,它就成立。但是如果我們將〜0定義爲'unsigned int',它仍然會給出1 – Atul 2015-02-12 07:07:57
@Atul,在C++中,文字'0'是一個帶符號的int。見ISO C++標準的2.14.2.2。 – ThomasMcLeod 2015-02-12 07:13:19
那麼即使我們這樣做:'unsigned int zeros = 0; unsigned int ones = 0xFFFFFFFF; unsigned int answer = 0;'still'answer'hold value 1 – Atul 2015-02-12 07:16:29
的std ::地圖<的std :: string,性病::向量<無符號長長>> – Narek 2015-02-12 06:54:04
重新@thomasMacleod:你的問題是錯誤的 - 你從32'0' 32'-1'減去。 – 2015-02-12 06:59:19
32'-1'is更多的天才則'是什麼類型「 - 」在這種情況下':d – Narek 2015-02-12 07:00:28