A. 關於計算機中原碼補碼反碼的問題
原碼最高位為符號位
反碼 若為正數則與原碼相同,若為負數則符號位不變,按位取反
補碼 若為正數則與原碼相同,若為負數則符號位不變按位取反末尾加一
B. 誰能介紹一下原碼、反碼、補碼
這是指的二進制編碼.原碼就是原來的二進制編碼,反碼就是把原碼按位取反,補碼就是在反碼的最低位是加一.如:
原碼:101100100
反碼:010011011
補碼:010011100
C. 在原碼,補碼,反碼中,誰的表示範圍最大
8位二進制機器碼為例說明:
.
原碼范圍:1111 1111b~0111 1111b
真值范圍: -111 1111b~+111 1111b, 即 -127d~ +127d
.
反碼范圍:1000 0000b~0111 1111b
真值范圍: -111 1111b~+111 1111b, 即 -127d~ +127d
.
補碼范圍:1000 0000b~0111 1111b
對應的真值范圍:-1000 0000b~+111 1111b, 即 -128d~ +127d
.
就此可知,補碼表示的數值范圍最大。
D. C語言中的反碼怎麼轉換成補碼例如為什麼反碼是11110101而補碼是11110110,求詳細解釋
其實復雜理解是很難的,我只知道這么弄的原因是計算機只能運算加法。(至少剛開始發明的時候是這樣的),其他運算都是通過加法的基礎實踐的。為了操作減法不需要借位,所採用的技巧。。。。。。。可以網路,《編碼的奧秘》。。。。。。所有的數據,什麼視頻,圖片,音頻,漢字,字母,數字,統統都是以二進制的形式表示的。
為了區分方便程序識別,在每個層次上都有相應的規范,
其中正負數的表示之間的區分就是,負數的表示方法是在正數的基礎上反碼,再加上1;就是對應的負數了,
比如3的整數表示就是原碼00000011負數就是反碼11111100加1,11111101就是-3在計算機中的存在形式;
E. 一個數的原碼,反碼,補碼怎麼算
計算機中的存儲系統都是用2進制儲存的,對我們輸入的每一個信息它都會自動轉變成二進制的形式,而二進制在存儲的時候就會用到原碼,反碼和補碼
例如:輸入25
原碼就是:0000000000011001
反碼: 1111111111100110
補碼: 1111111111100111
~
數值在計算機中表示形式為機器數,計算機只能識別0和1,使用的是二進制,而在日常生活中人們使用的是十進制,"正如亞里士多德早就指出的那樣,今天十進制的廣泛採用,只不過我們絕大多數人生來具有10個手指頭這個解剖學事實的結果.盡管在歷史上手指計數(5,10進制)的實踐要比二或三進制計數出現的晚. "(摘自<<數學發展史>>有空大家可以看看哦~,很有意思的).為了能方便的與二進制轉換,就使用了十六進制(2 4)和八進制(23).下面進入正題.
數值有正負之分,計算機就用一個數的最高位存放符號(0為正,1為負).這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的范圍為
(-127~-0 +0~127)共256個.
有了數值的表示方法就可以對數進行算術運算.但是很快就發現用帶符號位的原碼進行乘除運算時結果正確,而在加減運算的時候就出現了問題,如下: 假設字長為8bits
( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10
(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 顯然不正確.
因為在兩個整數的加法運算中是沒有問題的,於是就發現問題出現在帶符號位的負數身上,對除符號位外的其餘各位逐位取反就產生了反碼.反碼的取值空間和原碼相同且一一對應. 下面是反碼的減法運算:
( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10
(00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有問題.
( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10
(00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正確
問題出現在(+0)和(-0)上,在人們的計算概念中零是沒有正負之分的.(印度人首先將零作為標記並放入運算之中,包含有零號的印度數學和十進制計數對人類文明的貢獻極大).
於是就引入了補碼概念. 負數的補碼就是對反碼加一,而正數不變,正數的原碼反碼補碼是一樣的.在補碼中用(-128)代替了(-0),所以補碼的表示範圍為:
(-128~0~127)共256個.
注意:(-128)沒有相對應的原碼和反碼, (-128) = (10000000) 補碼的加減運算如下:
( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10
(00000001)補 + (11111111)補 = (00000000)補 = ( 0 ) 正確
( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10
(00000001) 補+ (11111110) 補= (11111111)補 = ( -1 ) 正確
所以補碼的設計目的是:
⑴使符號位能與有效值部分一起參加運算,從而簡化運算規則.
⑵使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計
所有這些轉換都是在計算機的最底層進行的,而在我們使用的匯編、C等其他高級語言中使用的都是原碼
F. -5的原碼、反碼和補碼各是多少啊,5呢
-5的原碼、反碼和補碼各是10000101、11111010和11111011。
5的原碼、反碼和補碼各是00000101、01111010和01111011。
計算機中的存儲系版統都是用2進制儲存權的,對我們輸入的每一個信息它都會自動轉變成二進制的形式,而二進制在存儲的時候就會用到原碼,反碼和補碼。
例如:輸入25
原碼就是:0000000000011001
反碼: 1111111111100110
補碼: 1111111111100111
(6)反碼誰發明的擴展閱讀:
補碼是為了計算方便而發明的。原始計算器只能做加法不能做減法,但是科學家發現,例如7+(-5)=2可以這樣算:7+(-5) = 7+(10000-5)-10000 = 10002 - 10000 = 2 。
這很奇怪,因為機器太傻,只能做加法,但是雖然不會減法,-10000還是很方便的,只要去掉開頭的1;用10000減也是很方便的,因為可以用9999減然後+1,而用9999減,只要把每一位用9減。
G. 原碼、反碼、補碼的產生、應用以及優缺點有哪些
1、 原碼:是機器數的一種簡單的表示法。其符號位用0表示正號,用1表示負號,數值一般用二進制形式表示。
優點:最簡單直觀。
缺點:不能直接參加運算,可能會出錯。
原碼來歷:在機器中,只能識別二進制數字,所以所以的數字都用原碼來表示。
2、 反碼:可由原碼得到。如果機器數是正數,則該機器數的反碼與原碼一樣;如果機器數是負數,則該機器數的反碼是對它的原碼(符號位除外)各位取反而得到的。
優點:解決負數加法運算問題,將減法運算轉換為加法運算,從而簡化運算規則。
缺點:沒有缺點
反碼來歷:為了解決「正負相加等於0」的問題,在「原碼」的基礎上,人們發明了「反碼」
3、 補碼:可由原碼得到。如果機器數是正數,則該機器數的補碼與原碼一樣;如果機器數是負數,則該機器數的補碼是對它的原碼(除符號位外)各位取反,並在未位加1而得到的
優點:可以把負數直接拿來算加法。
缺點:容易忘記公式,計算錯誤。
補碼來歷:計算機裡面,只有加法器,沒有減法器,所有的減法運算,都必須用加法進行,用補數代替原數,可把減法轉變為加法。
4、 在計算機中為什麼要使用補碼:由於原碼和反碼中,+0與-0的表示並不相同,所以計算機中一般使用補碼。其實還有一個更重要的作用,就是利用高位溢出,將減法運算變成加法。
H. 為什麼要引入數的反碼和補碼
1、 原碼:是機器數的一種簡單的表示法。其符號位用0表示正號,用1表示負號,數值一般用二進制形式表示。
優點:最簡單直觀。
缺點:不能直接參加運算,可能會出錯。
原碼來歷:在機器中,只能識別二進制數字,所以所有的數字都用原碼來表示。
2、 反碼:可由原碼得到。如果機器數是正數,則該機器數的反碼與原碼一樣;如果機器數是負數,則該機器數的反碼是對它的原碼(符號位除外)各位取反而得到的。
優點:解決負數加法運算問題,將減法運算轉換為加法運算,從而簡化運算規則。
缺點:0的表示不唯一
反碼來歷:為了解決「正負相加等於0」的問題,在「原碼」的基礎上,人們發明了「反碼」
3、 補碼:可由原碼得到。如果機器數是正數,則該機器數的補碼與原碼一樣;如果機器數是負數,則該機器數的補碼是對它的原碼(除符號位外)各位取反,並在未位加1而得到的
優點:可以把負數直接拿來算加法。
缺點:容易忘記公式,計算錯誤。
補碼來歷:計算機裡面,只有加法器,沒有減法器,所有的減法運算,都必須用加法進行,用補數代替原數,可把減法轉變為加法。
4、 在計算機中為什麼要使用補碼:由於原碼和反碼中,+0與-0的表示並不相同,所以計算機中一般使用補碼。其實還有一個更重要的作用,就是利用高位溢出,將減法運算變成加法。
I. 補碼,原碼,反碼什麼的。有什麼作用啊!
這三個詞是計算機裡面的內容,下面依次解釋:
原碼:原碼就是早期用來表示數字的一種方式: 一個正數,轉換為二進制位就是這個正數的原碼。負數的絕對值轉換成二進制位然後在高位補1就是這個負數的原碼。
舉例:
int類型的 3 的原碼是 11B(B表示二進制位), 在32位機器上佔四個位元組,那麼高位補零就得:
00000000 00000000 00000000 00000011
int類型的 -3 的絕對值的二進制位就是上面的 11B 展開後高位補零就得:
10000000 00000000 00000000 00000011
但是原碼有幾個缺點,零分兩種 +0 和 -0 。很奇怪是吧!還有,在進行不同符號的加法運算或者同符號的減法運算的時候,不能直接判斷出結果的正負。你需要將兩個值的絕對值進行比較,然後進行加減操作 ,最後符號位由絕對值大的決定。於是反碼就產生了。
反碼:正數的反碼就是原碼,負數的反碼等於原碼除符號位以外所有的位取反
舉例:
int類型的 3 的反碼是
00000000 00000000 00000000 00000011
和原碼一樣沒什麼可說的
int類型的 -3 的反碼是
11111111 11111111 11111111 11111100
除開符號位,所有位,取反
解決了加減運算的問題,但還是有正負零之分,然後就到補碼了
補碼:正數的補碼與原碼相同,負數的補碼為 其原碼除符號位外所有位取反(得到反碼了),然後最低位加1.
舉例:
int類型的 3 的補碼是:
00000000 00000000 00000000 00000011
int類型的 -3 的補碼是
11111111 11111111 1111111 11111101
就是其反碼加1
最後總結:
正數的反碼和補碼都與原碼相同。
負數的反碼為對該數的原碼除符號位外各位取反。
負數的補碼為對該數的原碼除符號位外各位取反,然後在最後一位加1。
二進制是計算技術中廣泛採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是「逢二進一」,借位規則是「借一當二」,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用「開」來表示1,「關」來表示0。
20世紀被稱作第三次科技革命的重要標志之一的計算機的發明與應用,因為數字計算機只能識別和處理由『0』.『1』符號串組成的代碼。其運算模式正是二進制。19世紀愛爾蘭邏輯學家喬治布爾對邏輯命題的思考過程轉化為對符號"0''.''1''的某種代數演算,二進制是逢2進位的進位制。0、1是基本算符。因為它只使用0、1兩個數字元號,非常簡單方便,易於用電子方式實現。