2011-01-10 65 views
2

的補假設我有一個可變一個人的一個號碼

INT一個= 512

現在,當我申請〜了,這意味着在c.How一的補我得到-513作爲輸出。

int是在尺寸和512二進制相當於最低16位是

0000 0010 0000 0000現在當你做了一個補變成

1111 1101 1111 1111現在可能有人告訴我,爲什麼輸出是-513。

我現在可以希望在這個論壇的傢伙理解我的問題。

+2

運算符'〜'被稱爲「按位否定」。 「補碼」只是表示有符號數字的一種方式,但還有其他一些類似廣泛的「二補」。在「補碼」的情況下,按位否定就像算術否定一樣,在C中由一元運算符(還有一個二進制「 - 」)執行。但他們有完全不同的含義。 '〜'只是切換每一位,忽略任何基礎類型的語義。 ' - '意識到類型的語義。 – datenwolf

回答

11

負數通常表示爲two's complement,這就是爲什麼它被解釋的原因。

假設int是16位,您將有位模式1111 1101 1111 1111。由於設置了最高位,因此該數字爲負數。要轉換爲十進制,根據二進制補碼規則,數字首先按位反轉。這會帶回你的512.然後添加一個,得到513.由於數字是負數,我們得到-513。

+0

不能讓自己變得更好。 – chronodekar

相關問題