源碼的移碼
『壹』 負數的補碼怎麼求
就比如-9 補碼是11110111。
9的源碼為00001001,如果是負數的話,補碼為最高位置1,
其餘取反也就是11110110,
然後在最低位加1即可即11110111。
『貳』 原碼,反碼,補碼和移碼: 原碼:1001101,反碼,補碼,移碼各是多少
解:首位數字表示正負不做變(1為負數,0為正數)
反碼:1110010(正數反碼等於原數,題中為負數,則除首位數對應取反)
補碼:1110011(得出反碼數基礎上末位加一)
移碼:0110011(補碼符號位第一位數字取反)
反碼是數值存儲的一種,多應用於系統環境設置,如linux平台的目錄和文件的默認許可權的設置umask,就是使用反碼原理。
補碼(2's complement)是一種用二進製表示有號數的方法,也是一種將數字的正負號變號的方式。
移碼(又叫增碼)是符號位取反的補碼,一般用指數的移碼減去1來做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。
(2)源碼的移碼擴展閱讀
補碼的設計目的是:
1.使符號位能與有效值部分一起參加運算,從而簡化運算規則.
2.使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計 所有這些轉換都是在計算機的最底層進行的,而在我們使用的匯編、C等其他高級語言中使用的都是原碼。
小數和分數的補碼:
1.十進制分數補碼可以先將分子和分母分別表示成二進制數,然後計算出二進制小數,再按下面第三步的方法將求出小數的補碼形式。
2.十進制小數的補碼也應該先將其轉換成二進制小數,再按下面第三步的方法將求出小數的補碼形式。
『叄』 原碼,反碼,補碼和移碼: 原碼:1001101,反碼,補碼,移碼各是多少
反碼:1,110010(除符號位以外,各位取反)
補碼:1,110011(除符號位以外,各位取反,末位加一)
移碼:0,110011(對補碼符號位取反)
注意:
1、首先判斷原碼的正負,因為對於正數,其原碼、補碼反碼表示形式相同(符號位為0,數值部分與真值相同)
2、對於反碼和補碼,要區別:已知[x補],求[-x補]的題目(連同符號位各位取反,末位加一)
(3)源碼的移碼擴展閱讀:
原碼、反碼、補碼、移碼的運算方法
運算過程:原碼->反碼->補碼->移碼
原碼 :二進制(開頭第一個表示符號0正1負)
反碼 :在原碼的基礎上,符號位不動,其他位取反 ---注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。
補碼 :在反碼的基礎上,運算+1 ---注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。
公式:兩數補碼的和==兩數和的補碼。
移碼 :在補碼的基礎上,符號位取反
例如:
例子3 10+(-10)=0 (使用補碼)
10(十進制) --- 00001010(源碼)----同源碼(反碼)----同源碼(補碼)
-10(十進制) --- 10001010(源碼)----11110101(反碼)----11110110(補碼)
00001010+ 10的源碼----注意正數用補碼(值等同於源碼)
11110110 -10的補碼----注意負數用補碼
---------
00000000 得到了0的補碼
『肆』 原碼,反碼,補碼,移碼
寫在前面:該文章為本人學習中寫的一些筆記和心得,發表出來主要是為了記錄自己的學習過程。本人才疏學淺,筆記難免存在不足甚至紕漏,但會不定期更新。
基本知識:假設有一個n位的二進制數
則這個二進制數共有 種狀態,這個數最大為
反過來 ,寫成二進制為1000 0000,一共有8位,1後面 7 個小數
以下舉例均為n位數,實例為8位數
原碼
簡單直接的二進制,以下以定點數為例。
定點純小數: 0 100 0000 首位為符號位,0為正1為負,這里表示0.1(10)
定點純整數: 0 000 0001 這里表示1(10)
因為有符號位,所以有正負零之分 0 000 0000 和 1 000 0000
數據范圍:-127~127(後面7位全為1)//公式表達為
特點:原碼不適合加減,但 適合乘除
反碼
正數的反碼與其原碼相同;負數的反碼是對其符號位後的原碼逐位取反,符號位不變(為1)
反碼能表達的數據范圍:與源碼一樣
補碼
目的:方便計算機進行加減
特點:在機器中適合加減的數字表示方式
補碼能實現計算機"加上負數"的本質原理是模運算,也就是A減去B等於A加上B相對於A的補數再求模。就好像時鍾順時針撥動3h和逆時針撥動9h得到的結果一樣。
二進制求補碼:
補數=(原數+模)(mod 模),很明顯,若原碼是正,則補碼是它本身,對於正數完全不用考慮求補碼。
對於計算機,因為兩個相加的數的位數相同(n),且和不能超過n+1位,因此應該取的模是100000...(n個0)。
因此對於n位純小數,它的模(十進制)為2 ,對於n位純整數,它的模為2 n
模 : (1 0 000 0000)
原碼: ( 0 000 0000)
注意到,盡管符號位沒有任何數值信息,這里取模依然把符號位考慮進去了,原因是我們可以通過定義補碼,來使第一個符號位參與計算機計算,從而得到想要的結果。
(同時,把符號位算進去可以讓我們在用數學公式法求二進制補數時,直接從結果得到補碼
例: x= -0.1011
[x]補=10+x=10.0000-0.1011=1.0101
原來是要取模得補數為0.0101(2),但正好首位的1可以表示原數的負號,因此可直接讀出補碼為1 0101
)
因此對於補碼,符號位既起指示正負號的作用,又參與運算。
另外,區別於原碼有兩個0(正負0),在補碼的規定中,只有一個0(00000...的正0,因為原碼也全是0),而1 0000...可以表示-1(補碼純小數)或-2 n-1 (補碼純整數)
//可以這么記(以純整數為例):因為後面n-1個0取反後為n-1個1,加1後為2 n-1 (10),前面一個1表示負數,因此補碼能表示-2 n-1
補碼怎麼來:原碼為正,補碼與原碼相同;原碼為負,後面的位數為原碼取反加1
移碼
目的:為了方便計算機比大小,消除符號位對計算機的干擾
原理是把負數部分全部移到非負數方向,也就是說要把第一位符號位的意義給消除掉。消除方法為:對於補碼的正數,符號位由0變為1,增大;對於補碼的負數,符號位概念消除,在計算機中被定義為正數,又為了確保原負數小於原正數,符號位由1變為0。
為了保證每個數之間大小關系不變,要用補碼來轉換成移碼,用原碼來轉換的話,負數之間的大小關系會反轉。
數學公式:
宏觀上來看是把居中的整個數軸平移到了非負半軸上,每個數之間的大小關系不變。
純小數[X] 移 =1+X
純整數 [X] 移 = (一般標准)
移碼怎麼來: 移碼和補碼尾數相同,符號位相反 (也就是補碼 首位的1->0 ;0->1)
因為移碼從補碼那裡來,所以也能額外多表示一個數