把乙個二進位制數右移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 用...