有符號數的二進位制數右移

2021-09-11 06:16:05 字數 708 閱讀 6328

把乙個二進位制數右移n位,規則為:

除符號位外,全部右移n位,

如果數字是乙個無符號數值,則用0填補最左邊的n位,

如果數字是乙個有符號數值,則用1填補最左邊的n位,

也就是說如果數字原先是乙個正數,則右移之後在最左邊補n個0;如果數字原先是個負數,則右移之後在最左邊填補n個1。

例子:0000 0010 >> 1 = 0000 0001 

0000 1010 >> 2 = 0000 0010

1000 0010 >> 1 = 1100 0001  

1000 1010 >> 3 = 1111 0001

上面的例子,正數的容易理解,為什麼負數的是填補n個1呢,解釋如下:

負數在計算機內部是以補碼形式存放的,

1000 0010是乙個負數,它的原碼是1111 1110,也就是說它不是表示-2,而是表示-126;

證明1000 0010右移1位後是1100 0001呢,

1000 0010的原碼是1111 1110,對原碼右移1位,為1011 1111,(也就是-63),再換成補碼,為1100 0001,

可以看出,1000 0010右移1位確實是1100 0001,也就是說,

換句話說,原碼(正數)移位時,缺失位補0;

補碼(負數)移位時,缺失位補符號位,當然正數時亦可(正數補碼與原碼完全一樣)。

如果數字原先是個負數,則右移之後在最左邊填補n個1。

有符號二進位制數的乘法

最近在閱讀 深入理解計算機系統 講到補碼乘法,書上給了乙個例子是三位無符號和補碼的乘法表。其中兩個負數的例子 3位二進位制乘法結果一般需要6為二進位制表達 帶符號數 x 101 3 和y 011 3相乘 結果為110111 9 如果直接算出來十進位制是 9然後轉換為6為二進位制我也能理解,但是我很好...

有符號二進位制數的減法

本人的簡單學習過程。題目 十進位制6 12 6,利用有符號位二進位制寫出來過程。解題思路 第一步 把減12變為加負12,利用有符號二進位制表示出來 6 12 6 12 00000110 00001100 00000110 10001100 第二步 將第一步結果分別轉化成補碼 見最下補充 000001...

二進位制符號數的原碼 反碼 補碼

說明 在本文中二進位制數均使用8位數字 二進位制符號數最左一位位符號位,0表示正,1表示負 在符號數值形式下,正數和負數的數值位均為其原碼,符號位0為正,1為負。如 十進位制 100 100 100 用符號數值表示為 01100100 01100100 011001 00 100 100 100 用...