原碼補碼源碼
① 原碼,反碼,補碼和移碼: 原碼:1001101,反碼,補碼,移碼各是多少
解:首位數字表示正負不做變(1為負數,0為正數)
反碼:1110010(正數反碼等於原數,題中為負數,則除首位數對應取反)
補碼:1110011(得出反碼數基礎上末位加一)
移碼:0110011(補碼符號位第一位數字取反)
反碼是數值存儲的一種,多應用於系統環境設置,如linux平台的目錄和文件的默認許可權的設置umask,就是使用反碼原理。
補碼(2's complement)是一種用二進製表示有號數的方法,也是一種將數字的正負號變號的方式。
移碼(又叫增碼)是符號位取反的補碼,一般用指數的移碼減去1來做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。
(1)原碼補碼源碼擴展閱讀
補碼的設計目的是:
1.使符號位能與有效值部分一起參加運算,從而簡化運算規則.
2.使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計 所有這些轉換都是在計算機的最底層進行的,而在我們使用的匯編、C等其他高級語言中使用的都是原碼。
小數和分數的補碼:
1.十進制分數補碼可以先將分子和分母分別表示成二進制數,然後計算出二進制小數,再按下面第三步的方法將求出小數的補碼形式。
2.十進制小數的補碼也應該先將其轉換成二進制小數,再按下面第三步的方法將求出小數的補碼形式。
② 原碼和補碼是什麼意思
原碼,沒有任何意義。
補碼具有:用正數代替負數,把減法變成加法運算的功能。
這樣,計算機中,只需用一個加法器,便可進行加減運算了。
所以,在計算機中,只是使用補碼。根本就不用原碼和反碼。
對於鍾表,倒撥 4 小時,可用正撥 8 小時代替。
對於十進制數,減一,可以用 +99 代替。
比如:24-1 = 23
24 + 99 = (1) 23
忽略進位,只取低兩位,結果就是相同的。
這里用來代替負數的正數,就叫做「補數」。
計算機用二進制,就叫做「補碼」。
正數,直接運算即可,不用求補碼。
負數的補碼是:模+該負數。
八位二進制的模是:2 的 8 次方=256。
-1 的補碼,就是:256-1 =255 = 1111 1111(二進制)。
-2 的補碼,就是:256-2 =254 = 1111 1110(二進制)。
。。。。。。
-128 的補碼,就是:256-128 =128 = 1000 0000(二進制)。
求補碼,用公式就可得出,並不需要繞道原碼反碼符號位。
③ 怎麼求一個負數的原碼和補碼
補碼,來自於:補數。
一般的常識:
鍾表時針,倒撥 3 小時,可以用「正撥 9 小時」來代替。
同理,分針 倒撥 X 分,可以用 正撥 60-X 代替。
60 是分針的周期。
十進制數,兩位:0~99,周期就是一百。
-1 可以用 +99 代替。
如:25 - 1 = 24
25 + 99 = (1) 24
忽略進位 1 百,結果就是相同的。
那麼,-1 的補數,就是 99 。
-2 的補數,就是 98 。
-X 的補數,就是【 周期 + 該負數 】。
--------
藉助於補數,就可以用加法,代替減法運算。
所以,計算機就可以節省硬體了。
--------
八位二進制:0000 0000~1111 1111(0~255)。
周期是 256。
那麼,-1 可以用 1111 1111 (+255) 代替。
即:
-1 的補碼,就是 1111 1111 (= 256-1=+255) 。
-2 的補碼,就是 1111 1110 (= 256-2=+254) 。
。。。
-X 的補碼,就是【 周期 + 該負數 】。
-128,就可以用 1000 0000 (= 128)代替 。
正數,不需要變換,直接運算即可。
--------
在計算機中,負數,就是用補碼存儲、計算的。
原碼和反碼,毫無用處,它們在計算機中都不存在。
④ 什麼是源碼,反碼,補碼
這三個都是二進制數,如果源碼是正的,那麼反碼,補碼都是和源碼是一樣的,如果源碼是負的話,其中最高位是符號位,1表示負,0表示正。比如-15,它的源碼是10001111,反碼就是把源碼的0和1互換位置,其中符號位不變。-15的反碼是11110000,補碼就是在反碼的基礎上末尾加1就行了
⑤ 計算機的原碼,反碼,補碼是怎麼回事可以舉例說明嗎
原碼、反碼和補碼是計算機中對數字二進制的三種表示方法。
1、原碼
原碼(true form)是一種計算機中對數字的二進制定點表示方法。原碼表示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為0,負數該位為1(0有兩種表示:+0和-0),其餘位表示數值的大小。
例如:用8位二進製表示一個數,+11的原碼為00001011,-11的原碼就是10001011。
2、反碼
反碼是數值存儲的一種,多應用於系統環境設置,如linux平台的目錄和文件的默認許可權的設置umask,就是使用反碼原理。反碼的表示方法是:正數的反碼與其原碼相同;負數的反碼是對正數逐位取反,符號位保持為1。
例如:
[+7]反= 0 0000111 B;
[-7]反= 1 1111000 B。
3、補碼
正數:正數的補碼和原碼相同。負數:負數的補碼則是符號位為「1」。並且,這個「1」既是符號位,也是數值位。數值部分按位取反後再在末位(最低位)加1。也就是「反碼+1」。
例如:
[+7]補= 0 0000111 B;
[-7]補= 1 1111001 B。
(5)原碼補碼源碼擴展閱讀
原碼、反碼、補碼的轉換方法如下:
(1) 已知原碼,求補碼。
例:已知某數X的原碼為10110100B,試求X的補碼和反碼。
首先通過原碼的首位確定該數字的正負,若為正數,反碼與原碼相同,補碼比原碼在末尾加1;若為負數,求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。
(2)已知補碼,求原碼。
按照求負數補碼的逆過程,數值部分應是最低位減1,然後取反。但是對二進制數來說,先減1後取反和先取反後加1得到的結果是一樣的,故仍可採用取反加1的方法。
⑥ 十進制的原碼、補碼
十進制-67的原碼是01000011、反碼是10111100和補碼是10111101。
轉換規則:
1、負整數的原碼為二進制前面加符號位;
-67=1000011(二進制)=11000011(原碼)
2、負整數的反碼=原碼各位取反(除了符號位外);
11000011(原碼)=10111100(反碼)
3、負整數的補碼=負整數的反碼+00000001;
10111100(反碼)=10111101(補碼)
(6)原碼補碼源碼擴展閱讀:
已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:
⑴如果補碼的符號位為「0」,表示是一個正數,其原碼就是補碼。
⑵如果補碼的符號位為「1」,表示是一個負數,那麼求給定的這個補碼的補碼就是要求的原碼。
例:已知一個補碼為11111001,則原碼是10000111(-7)。
因為符號位為「1」,表示是一個負數,所以該位不變,仍為「1」。
其餘七位1111001取反後為0000110;再加1,所以是10000111。
⑦ 原碼、補碼、反碼之間是怎樣轉換的
正數的原碼、反碼、補碼是一致的。(例如:2的原碼:0000 0010,那麼其反碼和補碼都是0000 0010)
負數的反碼顧名思義,是除了符號位與原碼一致,其餘位都與原碼相反。(例如:-2的原碼是1000 0010,那麼其反碼是1111 1101),負數的補碼則是在其反碼的基礎上加1。(例如:-2的反碼是1111 1110)
1、首先,數字除了我們平時最長使用的十進制數外,還有二進制,八進制,十六進制等。這里我們的原碼,補碼,反碼之間轉換指的是二進制數。如下。
⑧ 計算機內部如何存儲數據,關於源碼、補碼的問題!
源碼,反碼,補碼是計算機原理的術語。說白了就是為了理解計算機2進制用的。對於C/C++來說,是和數據類型有關的。整型(包括
char
,short,
int,
long)都是用補碼方式表示有符號數的。
無符號數是使用源碼方式表示的。float和double類型是使用階碼移碼方式存儲數據的。
計算機內部是2進制存儲的,吧一個存儲看作一定類型的數據,就對應著這種類型的計算。
如果沒有類型作為依託,你的假設就不成立了,所以不能說它到底表示是幾。
如果是整型類型,因為第一個位是0,所以不論有符合還是無符號,它都是一個正數;那麼可以認為它表示十進制數字18
⑨ 已知某數的二進制原碼 怎麼算他的反碼和補碼怎麼算
首先你得區分這個二進制書是帶符號位的還是不帶符號位的。
不帶符號位的:反碼就是將其原碼按位取反,比如「1000」反碼:「0111」;補碼是其本身。
帶符號位的:反碼就是其符號位不變,其他位按位取反。比如「10000000」
反碼:「11111111」;補碼就是反碼再加一。反碼「11111111」
補碼「10000000」。
⑩ 計算機源碼,反碼,補碼之間怎麼計算
轉換方法:
如果是正數或零,則首位為 0,補碼=原碼=反碼。
否則,首位為 1,數值位取反加一,即可實現「補碼與原碼」互換。
例如:
對 1111 1001 取反,為 1000 0110,再加一,得:1000 0111。
對 1000 0111 取反,為 1111 1000,再加一,得:1111 1001。
這說明,補碼 ←→ 原碼,方法是相同的。