當前位置:首頁 » 操作系統 » 5源碼反碼

5源碼反碼

發布時間: 2022-12-24 14:09:03

源碼 反碼 補碼的概念

帶符號數,有三種表示方法,即:原碼、反碼和補碼。

但是,在計算機系統中,數值一律用【補碼】來表示和存儲

所以,在計算機系統中,原碼和反碼,都是不存在的。

使用補碼的意義:可以把減法或負數,轉換為加法運算。

因此,就能簡化計算機的硬體。

=====================

補碼的概念,來自於:補數。

比如鍾表,時針轉一圈,周期是 12 小時。

那麼,倒撥 3 小時,可以用正撥 9 小時代替。

9,就是-3 的補數。計算方法:9 = 12-3。

同理,分針倒撥 X 分,可以用正撥(60-X)代替。

60,是分針的周期。

同理,三角函數的周期是 2π。那麼,

-π/2 處的函數值,就與2π-π/2 = +3π/2處相同。

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

當你使用兩位十進制數:0~99,周期就是 一百。

那麼,減一,就可以用 +99 代替。

24-1 = 23

24 + 99 = (1) 23

舍棄進位,這兩種演算法,功能就是相同的。

於是,99 就是 -1 的補數。

其它負數的補數,可以按照下式來求:

補數 = 周期 + 負數

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

計算機中使用二進制,補數,就改稱為【補碼】。

八位二進制是:0000 0000~1111 1111。

相當於十進制:0~255,周期就是 256。

那麼,-1,就可以用 255 = 1111 1111 代替。

所以:-1 的補碼,就是 1111 1111 = 255。

同理:-2 的補碼,就是 1111 1110 = 254。

繼續:-3 的補碼,就是 1111 1101 = 253。

。。。

最後:-128 的補碼,就是 1000 0000 = 128。

負數補碼的計算公式:【 256 + 這個負數 】。

(式中的 256 = 2^8,是八位二進制的周期。)

正數,並不存在補碼的問題。

所以,正數,並沒有補碼,可以直接運算。

(也有人亂說:正數本身就是補碼。)

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

求解算式:7-3 = 4。

計算機中,並沒有減法器,必須改用補碼相加。

列豎式如下:

7 的補碼=0000 0111

-3的補碼=1111 1101

--相加-------------

得:(1)0000 0100= 4 的補碼

舍棄進位,只保留八位,結果完全正確。

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

藉助於補碼,可以簡化計算機的硬體。

原碼和反碼,都沒有這種功能。

所以,在計算機中,根本就沒有原碼和反碼。

它們都是什麼?就不用關心了。

❷ 什麼是源碼,反碼,補碼

這三個都是二進制數,如果源碼是正的,那麼反碼,補碼都是和源碼是一樣的,如果源碼是負的話,其中最高位是符號位,1表示負,0表示正。比如-15,它的源碼是10001111,反碼就是把源碼的0和1互換位置,其中符號位不變。-15的反碼是11110000,補碼就是在反碼的基礎上末尾加1就行了

❸ 計算機源碼,反碼,補碼之間怎麼計算

轉換方法:

如果是正數或零,則首位為 0,補碼=原碼=反碼。

否則,首位為 1,數值位取反加一,即可實現「補碼與原碼」互換。

例如:

1111 1001 取反,為 1000 0110,再加一,得:1000 0111

1000 0111 取反,為 1111 1000,再加一,得:1111 1001

這說明,補碼 ←→ 原碼,方法是相同的。

❹ 原碼,反碼,補碼。和他們之間的轉換

是原碼
不是源碼
對於整數:補碼反碼原碼都是一樣的,也就是它本身的二進制
對於負數:
原碼:絕對值的原碼,將最高為變1
反碼:絕對值的原碼按位取反
補碼:絕對值的原碼按位取反再加1

❺ 原碼,反碼,補碼,移碼

寫在前面:該文章為本人學習中寫的一些筆記和心得,發表出來主要是為了記錄自己的學習過程。本人才疏學淺,筆記難免存在不足甚至紕漏,但會不定期更新。

基本知識:假設有一個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)

因為移碼從補碼那裡來,所以也能額外多表示一個數

❻ 整理一下關於原碼反碼補碼筆記

一個數據表示時使用,第一位為符號位,剩餘的為有效位

字16位 1位符號 15有效數據位

int>整數 4個位元組32

-2 31-2 32-1

long>長整形8個位元組64一位符號63

-2 63-2 63-1

1000 0111 (-7)二轉十

機器數
機器數就是一個數在計算機中二進製表現形式
+3 0000 0011
+7 0000 0111
-5 1000 0101

機器數的真值
將帶符號位的機器數對應的真正數值稱為機器數的真值
0000 0011 = +3
0000 0111 = +7
1000 0101 = -5

原碼就是符號位加上真值的絕對值

求原碼:

34=00100010

原碼 -39 1 0 1 0 0 1 1 1

原碼 -55 1 0 1 1 0 1 1 1

正數:正數的反碼=源碼 如 +9:0000 1001 源碼=0000 1001 反

負數:符號位不變,其餘各位琢一取反,只有兩種狀態{0,1},即1->0 0->1

負數
負數的反碼是保持符號位不變,其餘各位直接取反
取反: 只有0 和 1兩種狀態,也就是 0 -> 1 , 1 -> 0
-3 1000 0011[原] = 1111 1100[反]

正數:正數的原碼=反碼=補碼 如+3 0000 0011 {原}=0000 0011{反}=0000 0011 {補}

負數:先求的反碼,在負數反碼的基礎上,加一

補碼需要在反碼的基礎上轉換得到
正數
正數的原碼 反碼 補碼 全部相同
+1 0000 0001[原] = 0000 0001[反] = 0000 0001[補]

負數
負數的補碼需要在反碼的基礎上,最後一位加 1;
-3 1111 1100[反] = 1111 1101[補

擴展

為什麼需要反碼和補碼?

在設計計算機時,只設計了加法器沒有設計減法器

5-3=5+(-3)

原碼

5=0000 0101 (原碼)

-3=1000 0011 (原碼)

0000 0101

1000 0011

1000 1000 結果(原碼)=-8

原碼不可以直接計算的!

反碼:解決了只設計加法器,使用加法器進行減法運算的問題;

缺點:正負相加0的表示不唯一

1-1=1+(-1)

1=0000 0001 {反}

-1=1000 0001 {原碼}

-1=1111 1110 {反碼}

0000 0001

1111 1110

1111 1111 {反碼}=1000 0000{原碼}=-0 負0

補碼{高位溢出}

1=0000 0001{補}

-1=1111 1111{補}

0000 0001

1111 1111

0000 0000

一個位元組8位,表達的范圍-2 7-2 7-1

32+12=44

44-12=32

44+(-12)=32

將補碼轉原碼

因為負數的補碼不能直接讀出結果,但是原碼可以,所以將補碼轉原碼,可以讀出負數的值

補碼>原碼

原則:==補碼的補碼

把補碼當原碼,求補碼

計算規則:符號位不變,其餘取反,加1;

ASCll編碼:最早的最重要的基本的英美文字的字元集

只使用了低7位二進制,其他的認為無效,它使用了0-127這128個碼位。剩下128個碼位留作擴展,採用順序存儲方式存儲字元

ISO-8859-*

使用ASCll 剩餘的碼位進行擴展

iso-8859-1專門對英語做的擴展 tomcat>默認採用iso-8859-1》utf-8

西歐國家較多,各個國家在ASCll基礎上,擴展形成了自己國家專用的編碼,最終形成了ISO-8859-*系列

GB2312

GB2312字集是簡體,6763個簡體漢字

BIG5

繁體字集

Unicode

字元集(簡稱為UCS)

GBK【936】

是簡繁字集,包括GB2312字集,BlG5字集合一些符號,共包括21003個字元。GBK編碼是GB2312的超級,向下完全兼容GB2312

UTF-8[65001]萬國碼

包含全世界所有國家需要用到的字元,是國際編碼,它對英文使用8位(即一個位元組),中午使用3個位元組

ANSl

ANSl不是一種具體的編碼

系統默認的編碼決定,如果系統的默認的編碼是GBK> ANSl就代表 GBK

認識ASCll碼表

常用:0-9 A-Z a-z對應的ASCll碼分別為:48-57,65-90,97-122

0>48

A>65

a>97

❼ 原碼,反碼,補碼和移碼: 原碼:1001101,反碼,補碼,移碼各是多少

解:首位數字表示正負不做變(1為負數,0為正數)
反碼:1110010(正數反碼等於原數,題中為負數,則除首位數對應取反)
補碼:1110011(得出反碼數基礎上末位加一)
移碼:0110011(補碼符號位第一位數字取反)

反碼是數值存儲的一種,多應用於系統環境設置,如linux平台的目錄和文件的默認許可權的設置umask,就是使用反碼原理。

補碼(2's complement)是一種用二進製表示有號數的方法,也是一種將數字的正負號變號的方式。

移碼(又叫增碼)是符號位取反的補碼,一般用指數的移碼減去1來做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。

(7)5源碼反碼擴展閱讀

補碼的設計目的是:

1.使符號位能與有效值部分一起參加運算,從而簡化運算規則.

2.使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計 所有這些轉換都是在計算機的最底層進行的,而在我們使用的匯編、C等其他高級語言中使用的都是原碼。

小數和分數的補碼:

1.十進制分數補碼可以先將分子和分母分別表示成二進制數,然後計算出二進制小數,再按下面第三步的方法將求出小數的補碼形式。

2.十進制小數的補碼也應該先將其轉換成二進制小數,再按下面第三步的方法將求出小數的補碼形式。

❽ C語言中,什麼是補碼、源碼、反碼分別怎樣計算

一、原碼

求原碼:X≥0,則符號位為0,其餘照抄;
X≤0,則符號位為1,其餘照抄。
【例1】X=+1001001 [X]原 = 01001001
【例2】X=-1001001 [X]原 = 11001001

二、反碼
求反碼:若X≥0,符號位為0,其餘照抄;
若X≤0,符號位為1,其餘按位取反。
【例3】X=+1001001 [X]反 = 01001001
【例4】X=-1001001 [X]反 = 10110110

三、補碼
求補碼:若X≥0,符號位為0,其餘照抄;
若X≤0,符號位為1,其餘取反後,最低位加1。
【例5】X=+1001001 [X]補 = 01001001
【例6】X=-1001001 [X]補 = 10110111

❾ -5的原碼、反碼和補碼各是多少啊,5呢

-5的原碼、反碼和補碼各是10000101、11111010和11111011。

5的原碼、反碼和補碼各是00000101、01111010和01111011。

計算機中的存儲系統都是用2進制儲存的,對我們輸入的每一個信息它都會自動轉變成二進制的形式,而二進制在存儲的時候就會用到原碼,反碼和補碼。

例如:輸入25

原碼就是:0000000000011001

反碼: 1111111111100110

補碼: 1111111111100111

(9)5源碼反碼擴展閱讀:

補碼是為了計算方便而發明的。原始計算器只能做加法不能做減法,但是科學家發現,例如7+(-5)=2可以這樣算:7+(-5) = 7+(10000-5)-10000 = 10002 - 10000 = 2 。

這很奇怪,因為機器太傻,只能做加法,但是雖然不會減法,-10000還是很方便的,只要去掉開頭的1;用10000減也是很方便的,因為可以用9999減然後+1,而用9999減,只要把每一位用9減。

熱點內容
為什麼打開的三菱程序不能編譯 發布:2025-05-11 12:16:40 瀏覽:21
ftp定價是怎麼回事 發布:2025-05-11 12:09:18 瀏覽:333
android敏捷開發 發布:2025-05-11 11:56:49 瀏覽:79
腳本pon 發布:2025-05-11 11:52:27 瀏覽:826
ct5推薦哪個配置 發布:2025-05-11 11:47:45 瀏覽:741
領購未上傳發票 發布:2025-05-11 11:43:27 瀏覽:716
查看華為雲伺服器的ip地址 發布:2025-05-11 11:24:44 瀏覽:236
長沙銀行密碼多少 發布:2025-05-11 11:24:38 瀏覽:671
緩存手機視頻合並軟體哪個好 發布:2025-05-11 11:22:30 瀏覽:698
伺服器c盤怎麼清除 發布:2025-05-11 11:16:33 瀏覽:40