補碼 左移與右移 32位系統

計算機中的-2就是11111110b,而數學上的-2無法在計算機中直接存儲,因此就有個算法來計算應該怎麼存儲。就是正數的反碼+1,由於這個數正好加上原來的正數=0(溢出部分無論)
 html

首先,你要理解,計算機裏面沒有負數的概念,全部數都是無符號數。可是邏輯上有負數,怎麼辦呢?讓他計算正確就OK了,那麼負數就成正數取反+1了程序員

 

你別太關心啥補碼,反碼的。容易搞暈。
計算機裏面。你關注哪一個無符號數+2正好溢出,那麼那個數就是-2,由於他+2=0算法

因此別把數學上直接搬上來套,越搞越暈。
反正個人理解就是計算機裏面根本就無論你負數啥的,全是無符號數,只是爲了讓咱們更加方便的處理數學問題,引入了符號位這些概念編程

 算算補碼怎麼來的吧。
2=00000010b,而後取反11111101b+1=11111110b操作系統

 

-2=0xFFFFFFFE,你無論算數右移多少次都是-1debug

 

說了,計算機無論你有符號無符號的。計算結果的最高爲是1,就會給你設置SF,至於你去不去看SF是你的事情; 設計

 

 

---------------------------------------------------------------------------------htm

QQ:149955923內存

若是你聲明一個負數變量,計算機會將你這個變量變成2進制,而後取反+1get

 

計算機在底層微電子元件中沒有設計負數的電路,因此用正數的補碼來表示負數

 

計算機中的-2就是11111110b,而數學上的-2無法在計算機中直接存儲,因此就有個算法來計算應該怎麼存儲。就是正數的反碼+1,由於這個數正好加上原來的正數=0(溢出部分無論)

網友推薦的書:

巨神之碑文(149955923)
我推薦Intel彙編程序設計  講的很是詳細

 

黑無止境(546515315)
我推薦天書夜讀,裏面有C語言在內存中的貯存方式

 

黑無止境(546515315)
還有一本 深刻理解計算機體系結構 這本書講的是從C語言程序員的角度去看待操做系統的內存結構

---------------------------------------------------------------------------------------------------------

 

轉自:http://zhidao.baidu.com/question/51147577.html?fr=ala0

 

問:二進制負數的補碼的原理
爲何要用補碼的形式改更負數
如何掌握它的用法?

 

一、在計算機系統中,數值一概用補碼來表示(存儲)。
主要緣由:使用補碼,能夠將符號位和其它位統一處理;同時,減法也可按加法來處理。另外,兩個用補
碼錶示的數相加時,若是最高位(符號位)有進位,則進位被捨棄。
二、補碼與原碼的轉換過程幾乎是相同的。
數值的補碼錶示也分兩種狀況:
(1)正數的補碼:與原碼相同。
例如,+9的補碼是00001001。
(2)負數的補碼:符號位爲1,其他位爲該數絕對值的原碼按位取反;而後整個數加1。
例如,-7的補碼:由於是負數,則符號位爲「1」,整個爲10000111;其他7位爲-7的絕對值+7的原碼
0000111按位取反爲1111000;再加1,因此-7的補碼是11111001。

 

經以上整合,本身得結論以下:

(1) -4 >> 1 結果是-2;

(2) -4 >>2  結果是-1;

 

計算過程以下:

4的原碼:0x0000 0004;==>除符號位0外,其餘按位取反加1===>(符號位變爲1),得:

-4的補碼是:0xFFFF FFFC;

那麼-4進行右移1位,得:0xFFFF FFFE;(這個再進行取反加一,便可獲得它的整數值爲-2);--一個負數的補碼,再次進行求補碼則可還原其原碼;

 

也可經過debug.exe來查看-4的補碼是多少

cmd==>debug

==>a命令

==>mov ax,-4

==>回車,再回車

==>t

便可查看到ax=FFFC  (即計算機裏是以補碼形式進行存儲負數)

相關文章
相關標籤/搜索