學懂模運算 負數的補碼為什麼要按位取反再加一
模運算和負數的補碼為什麼要按位取反再加一
模運算
模運算概念:在一個模運算系統中,一個數與它除以“模”後的餘數等價
作用:實現+ 和– 的統一,實現數值運算時使用同一的符號
例如:模12系統時鐘
假定鐘錶時針指向10點,要將它撥向6點, 則有兩種撥法:
① 倒撥4格:10- 4 = 6
② 順撥8格:10+8 = 18
即模運算:8是- 4對模12的補碼,- 4的模12補碼等於8
10- 4 ≡ 10+8 (mod 12)
- 4 ≡ 8 (mod 12)
概念解析(非常重要)
-
模運算實際上就相當與一個一元一次函式,如:1+x=0,求x=?,答:x=0-1 即-1,這個一元一次函式中0就是模,就相當於- 4 ≡ 8 (mod 12)中的12,1和-1就相當於- 4 ≡ 8 (mod 12)中-4和8
-
至於為什麼,因為“溢位”,就像鐘錶只有12個點,就相當與一個12進位制數,而儲存這個數的空間只有一位,當超過12點後,時間就放生了“溢位”,可顯示的數值就變成了0,那麼指向10點的鐘表,要將它撥向6點,如果這麼看10-x=0,求x,答:x=-4或+8,-4可以理解往後面撥四個小時就行了,+8呢,10點往前撥8個小時,10+8=18,但是模12系統中最大的數位為12,18超過了12發生了溢位,自然就變成6了
-
換算到計算機系統中的二進位制資料,1+x=0,求x=?由於需要表示符號位就變成了,00000001+x=00000000,裡面的x就應該代替 -1的二進位制編碼才對,這樣,我們得到 x=11111111,而11111111就是-1,所以稱11111111為-1的補碼
-
我們常理解為補碼就是負數“按位取反,末尾加一”,我們知道模就是R位模系統中的基數,如:1-1=0,如-1=0-(+1),即二進位制的1000000001=0000000000-0000000001,即1000000001=(1111111111-0000000001)+0000000001,正是負數的按位取反,末尾加一
結論
一個負數的補碼等於模減該負數的絕對值
1000000001(-1)=0000000000-0000000001(1)
對於某一確定的模,某數減去小於模的另一數,總可以用該數加上另一數負數的補碼來代替
相關文章
- 二進位制中為什麼負數是正數取反再加一
- 為什麼計算機採用補碼進行運算?計算機
- 負數補碼(16進位制轉10進位制的負數)
- 計算機為什麼要用補碼計算機
- 一文搞明白位運算、補碼、反碼、原碼
- 從模運算的角度看原碼和補碼
- C/C++模運算(正負整數)C++
- 位運算-判斷一個數是否為2的整數次方
- Java中按位取反運算子Java
- C# ~按位取反運算子C#
- 位運算子之---按位取反運算子(簡單易懂)
- 線上原碼,反碼,補碼的計算工具--支援正數負數輸入以及不同位數的二進位制輸出
- 運維工程師為什麼要懂Python?運維工程師Python
- 1的個數 【位運算】
- 學習位運算
- [20211130]為什麼出現負數.txt
- 位操作(取反)
- 對十進位制數字的按位輸出,取反,並求其位數
- 用位運算為你的程式加速
- 鮮為人知的python位運算Python
- React原始碼中的位運算技巧React原始碼
- 為什麼要“東數西算”?
- [20211203]為什麼出現負數3.txt
- 關於二進位制表示和補碼計算的來龍去脈,入門看了秒懂
- 計算機二進位制中的原碼,反碼,補碼計算機
- 雲端計算開發一般負責什麼工作呢?更偏向於運維麼?運維
- 二進位制、位運算、位移運算
- Python數學運算Python
- 二進位制取反
- 一文了解有趣的位運算(&、|、^、~、>>、<<)
- 雲端計算需要學什麼?學習雲端計算能從事什麼崗位?
- 位運算
- 計算機中帶符號的整數為何採用二進位制的補碼進行儲存?計算機符號
- 為什麼要學習Linux雲端計算運維?原因竟是“它”!Linux運維
- Java中Short型別轉換為Int型別是如何計算的?原碼、反碼、補碼是什麼?Java型別
- 計算機中為什麼要用二進位制計算機
- 82. 落單的數 ( 位運算-統計 )
- 阿里巴巴為什麼建議使用BigDecimal進行浮點數運算阿里Decimal