原碼為什麼有 0和 0之分?

時間 2021-06-01 12:36:21

1樓:貓爹

原碼本身不存在所謂的設計,只是自然的用乙個位來表示符號,正負數不能直接相加得到正確結果。反碼(one's complement)通過設計可以讓正負數直接參與運算,不過仍然浪費乙個表示,即+0和-0。真正實際用在各個架構中的是補碼(two's complement),只有乙個零。

8位可以用來表示-128到127。

直接回答問題就是設計編碼的時候確實統一了+0和-0,使用的是補碼的方式來做到。而所謂的原碼的編碼設計是個偽說法,原碼不存在「設計」,只是最本能的用位表示符號數的方式。一般之所以拿出來說就是為了說明白我們為什麼需要補碼這種不不直觀的設計來編碼。

2樓:魯哈花

原碼中最高位為符號位,其他位表示數值,任何數值都有正負之分,比如有+1和-1,也必然有+0和-0,但是+0和-0是相等的,卻有兩種不同的表示,不合理。

題主說強制統一,合理。但是方案呢?補碼就是一種方案,強制統一了0的表示,還可以多表示乙個數字。

一位元組可以表示[-128, 127]。原碼不可以,最多是[-127, +127]。

不用補碼的強制統一除非是規定0就是+0,不是-0,最高位為1的0不是0。那麼問題來了,最高位為1的那個0是什麼呢?我們無法避免它的出現,一旦出現就無法解釋,會更麻煩。

1 乘 0 為什麼等於 0?

xfl 我個人想當然地認為,那是因為人們始終相信乘法交換律就是徹底的真理。首先,我得感嘆中華文化的博大精深,中國玩文字遊戲,可謂世界之最。後面的計算全部基於十進位制 先拿除法開刀 13 5 2 3 中文讀法是 十三除以五得二餘三,或者五除十三得二餘三。我對中文這樣描述的理解是 除,即除去,刪去,去掉...

為什麼heap spary要用0x0C0C0C0C這個奇怪的數字?

原因很簡單,因為在DEP出現之前堆噴是一種不精準的技術。就是說它需要一段滑板指令來增大靶子的面積。在這種情況下就需要乙個值,當它是位址時是我們的堆噴可以抵達的,當它是指令時是可以當成滑板指令不影響執行的。所以0x0C0C0C0C就成為了通用位址。那麼為什麼nop這種在棧中常用的滑板指令不行?你可以想...

0 除以 0 為什麼沒有結果呢?那此時 0 為什麼不能做除數呢?

冰楓的第五小號 其實關鍵在於除法的定義與實現,所以說如果在這裡我給出一種能夠除以0的實現,比如說像這個 只適用於自然數 public static operatorint int left int right if i left break if i left return newint times...