補碼轉原碼(算術左移一位負變正)

2021-09-23 23:29:36 字數 809 閱讀 9259

很早之前寫過一篇關於補碼的文章,但是長時間不看又差不多忘記了,翻出來看發現寫的挺爛的,有點沒說明白,所以希望這裡能說明白~~

關於補碼,我們知道:

在計算機中,一切的一切都是用補碼儲存

打乙個比喻,東西在計算機中是用各種編碼儲存,不論是字元還是指標(指標也是儲存的資料),都是用補碼儲存。我們寫的**相當於是乙個外文的說明書,而編譯器是翻譯器,將我們的說明書翻譯告訴機器如何解讀那些儲存的資訊。

比如同樣乙個 128,用char解讀會出現神奇的效果(詳見下篇),但是用int解讀還是128!!

**告訴機器如何解讀儲存的資料

回到正題,那麼什麼 int 型數隻算術左移一位就可以從負數變成正數? 這個數的從左向右數的第二位必然為0,可以是 10111…1(30個1)。

那麼這個數究竟是多少呢?

有乙個補碼轉原碼的計算方式是,第一位是符號位

如:1000 = -8,1001 = -8 + 1 = -7, 1011 = -8 + 2 + 1 = -5

即 -2^32+0*2^31+1*2^30+…+1*2^0

= -2^31+2^30-1

=-1073741825

#include 

#include

#include

using

namespace

std;

void showinbinary(int number)

int main()

原碼一位乘法和補碼一位乘法

原碼乘法遵循的規則如下 比如 a 0.1101,b 0.1011,求a b的積?詳細計算過程如下圖 符號位與符號進行計算.a的符號位為 1,b的符號位為 1.兩個符號進行異或運算最後的符號仍然是 1.數值位乘以數值位.a 0.1101,b 0.1011.我們採用雙符號位來進行計算.a 00.1101...

定點原碼 補碼一位乘

移位操作對於任何計算機來說都是不可缺少的操作,各種計算機指令系統中都含有移位指令。這裡首先給大家介紹一下移位操作中的算術移位 原碼右移 補碼右移 算術原碼右移 符號位不變,各位右移,最高有效位補0,末位移出。列如 1.1001 右移 1.0100 0.1101 右移 0.0110 算術補碼右移 符號...

任意位寬的補碼轉原碼,原碼轉補碼

基礎知識 對於正數 正數 原碼 反碼 補碼 對於負數 原碼 補碼 和 補碼 原碼 的規律一樣,都是 取反加1 eg 以 3 為例 前面的1,是符號位,0為正,1為負。不參與運算 原碼 補碼 111 原碼 100 反碼 101 補碼 補碼 原碼 101 補碼 110 111 原碼 define bit...