源碼0是正
1. 二進制的原碼、補碼、反碼詳解
計算機中,並沒有原碼和反碼,只是使用補碼,代表正負數。
使用補碼的意義:可以把減法或負數,轉換為加法運算。從而簡化計算機的硬體。
------------
比如鍾表,時針轉一圈,周期是 12 小時。
倒撥 3 小時,可以用正撥 9 小時代替。
9,就稱為-3 的補數。
計算方法:12-3 = 9。
對於分針,倒撥 X 分,就可以用正撥 60-X 代替。
------------
如果,限定了兩位十進制數 (0~99),周期就是 100。
那麼,減一,就可以用 +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+這個負數。
正數,直接運算即可,不需要求補碼。
也可以說,正數本身就是補碼。
------------
補碼的應用如: 7-3 = 4。
用補碼的計算過程如下:
7 的補碼=0000 0111
-3的補碼=1111 1101
--相加-------------
得:(1) 0000 0100 = 4 的補碼
舍棄進位,只保留八位,作為結果即可。
這就是:使用補碼,加法就代替了減法。
所以,在計算機中,有一個加法器,就夠用了。
原碼和反碼,都沒有這種功能。
------------
原碼和反碼,毫無用處。計算機中,根本就沒有它們。
2. +0或者-0的源碼、反碼、補碼分別是什麼補碼是一樣的嗎
整數(正整數、負整數、零),是以各種代碼,存入計算機的。
要知道,天下,只有一個零。
零,既不是正數,也不是負數。這可是小學的知識。
但是,計算機磚家,硬在零上強加了一個符號位!
於是,在原碼反碼中,就都為一個零,編造了正負兩個代碼。
零的原碼,有兩個:0000 0000、1000 0000。
反碼,也是兩個:0000 0000、1111 1111。
這些磚家,這就是要「上天」哪!
-------------------
原碼和反碼,都是重復定義了「零的編碼」,這就造成了混亂。
而且,零多佔用一組代碼,那麼,所能表示的數字,必然就少一個。
因此,八位的原碼反碼,都不能表示-128。
這就導致了:【原碼和反碼,計算機都無法使用】。
所以,在計算機系統中,數值,一律採用補碼來表示和存儲。
-------------------
補碼的理論,來源於數學的規律,並非是人為的胡編亂造。
0 的八位補碼,只有一個,就是:0000 0000。
零,在補碼中,只用唯一的一組代碼來表示,這就不會產生混亂。
--------------------
求補碼,書上介紹的方法,就是:取反加一。
但是,原碼反碼中,都是沒有 0 和-128。
(雖然原碼反碼都有 +0 和-0,但是它們畢竟不是 0。)
誰再想用「取反加一」,就要 Duang、Duang 的碰壁了。
--------------------
那麼,0 和-128 的補碼,都是怎麼求出來的?
補碼,有自己的定義式,與原碼反碼,並無關系。
這定義式,是由數學理論推導出來的,要比胡說八道的「取反加一」更准確嚴密。
當 X >= 0: [ X ]補碼 = X;
當 X < 0: [ X ]補碼 = X + 2^n, n 是補碼的位數。
按照定義式,0 和-128 的八位補碼,都可以求出來了。
[ 0 ]補碼 = 0000 0000。
[-128]補碼 = -128 + 2^8 = 128 = 1000 0000 (二進制)。
--------------------
如果按照「取反加一」,零的補碼,也將是「負零的反碼+1」。
那麼,[-0 ]補碼,就是:0000 0000!
發現有點詭異呀?
-0,不是負數嗎?其補碼的符號位。怎麼是(0)正的!
哪位計算機磚家來解釋解釋。。。
3. +0或者-0的源碼、反碼、補碼分別是什麼補碼是一樣的嗎
0原碼是00000000
-0原碼是10000000
0反碼是00000000
-0反碼是11111111
0補碼是00000000
補碼沒有正0與負0之分
正數的反碼、補碼和其原碼相同負數的反碼是其原碼除符號位外其他位取反負數的補碼是取其反碼後加1
4. +0或者-0的源碼、反碼、補碼
[+0]原碼=0000 0000, [-0]原碼=1000 0000
[+0]反碼=0000 0000, [-0]反碼=1111 1111
[+0]補碼=0000 0000, [-0]補碼=0000 0000
補碼沒有正0與負0之分。正數的反碼、補碼和其源碼相同,負數的反碼是其源碼,除符號位外其他位取反負數的補碼是取其反碼後加1。
詳細釋義:
所謂原碼就是二進制定點表示法,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。
(一)反碼表示法規定:
1、正數的反碼與其原碼相同;
2、負數的反碼是對正數逐位取反,符號位保持為1;
(二)對於二進制原碼10010求反碼:
((10010)原)反=對正數(00010)原含符號位取反= 反碼11101 (10010,1為符號碼,故為負)
(11101) 二進制= -2 十進制
(三)對於八進制:
舉例 某linux平台設置了默認的目錄許可權為755(rwxr-xr-x),八進製表示為0755,那麼,umask是許可權位755的反碼,計算得到umask為0022的過程如下:
原碼0755= 反碼 0022 (逐位解釋:0為符號位,0為7-7,2為7-5,2為7-5)
(四)補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
(4)源碼0是正擴展閱讀
轉換方法
由於正數的原碼、補碼、反碼表示方法均相同,不需轉換。在此,僅以負數情況分析。
(1) 已知原碼,求補碼。
例:已知某數X的原碼為10110100B,試求X的補碼和反碼。
解:由[X]原=10110100B知,X為負數。求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。
1 0 1 1 0 1 0 0 原碼
1 1 0 0 1 0 1 1 反碼,符號位不變,數值位取反
1 +1
1 1 0 0 1 1 00 補碼
故:[X]補=11001100B,[X]反=11001011B。
(2) 已知補碼,求原碼。
分析:按照求負數補碼的逆過程,數值部分應是最低位減1,然後取反。但是對二進制數來說,先減1後取反和先取反後加1得到的結果是一樣的,故仍可採用取反加1 有方法。
例:已知某數X的補碼11101110B,試求其原碼。
解:由[X]補=11101110B知,X為負數。
採用逆推法
1 1 1 0 1 1 1 0 補碼
1 1 1 0 1 1 0 1 反碼(末位減1)
1 0 0 1 0 0 1 0 原碼(符號位不變,數值位取反)
5. 什麼是源碼,反碼,補碼
這三個都是二進制數,如果源碼是正的,那麼反碼,補碼都是和源碼是一樣的,如果源碼是負的話,其中最高位是符號位,1表示負,0表示正。比如-15,它的源碼是10001111,反碼就是把源碼的0和1互換位置,其中符號位不變。-15的反碼是11110000,補碼就是在反碼的基礎上末尾加1就行了
6. 簡單易學的二進制源碼、反碼、補碼,不懂的快看過來
二進制在計算機技術中廣泛應用。二進制數用0和1兩個數字及其組合來表示任何數,二進制的進位規則是:「逢2進1」。數字1在不同的位上代表不同的值,按從右至左的次序,這個值以2倍遞增。
在計算器中參與運算的數有兩大類:無符號數和有符號數
對於有符號數而言,符號的正、負機器是無法識別的,但由於「正、負」恰好是兩種截然不同的狀態,如果用「0」表示「正」,用「1」表示「符」,這樣符號也被數字化了,
並且規定將它放在有效數字的前面,即組成了有符號數。所以,在二進制中使用最滾鍵高位(第一位)來表示符號,最高位是0,表示正數;最高位是1,表示負數。
無符悔棗號數是針對二進制來講的,無符號數的表數范圍是非負數。全部二進制均代表數值(所有位都用於表示數的大小),沒有符號位。即第一個"0"或"1"不表示正負。
例子:
在二進制系統中是以bit(位)來作為數據存儲單元的(詳細內容請看前言)碧備拆,假設 int number = 1 ,那麼number在計算機系統中將表示如下:
00000000 00000000 00000000 00000001
同理可得,number=-1 時,在二進制中表示如下:
10000000 00000000 00000000 00000001
注意:最高位(第一位)是符號位,因為是number值為1是一個正數,所以最高位為0;
要從右到左用二進制的每個數去乘以2的相應次方(次方要從0開始算起);
假如:二進制數1101轉化成十進制 ,那麼 1101 = 1*20+0*21+1*22+1*23 = 1+0+4+8 = 13;
注意:任何數的0次方都是1。
對於有符號數而言:
二進制的最高位是符號位:0表示正數,1表示負數
正數的原碼、反碼、補碼都一樣;
負數的反碼 = 它的原碼符號位不變,其他位取反(0 ->1 ; 1->0 );
負數的補碼 = 它的反碼 +1;
0的反碼、補碼都是0;
在計算機運算的時候,都是以補碼的方式來運算的;
例子:
下面我們就使用「有符號數」來模擬一下,在計算機中是怎樣運算的。
例如:1+1 ,在計算機中運算如下:
1的原碼為:
00000000 00000000 00000000 00000001
因為「正數的原碼、反碼、補碼都一樣」,所以,1的補碼 = 1的原碼,所以 1的補碼+ 1的補碼 就等於:
00000000 00000000 00000000 00000001
+
00000000 00000000 00000000 00000001
=
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000010( 轉換為10進制) = 0*2^0 + 1*2^1 = 0 + 2 =2
例如:1-2,在計算機中運算如下:
在計算機中減運算其實是作為加運算來操作的,所以,1-2 = 1 + ( -2 )
第一步: 把 1補碼找出來(因為正數的原碼、反碼、補碼都一樣,所以我們可通過原碼直接獲取補碼):
1的補碼:
00000000 00000000 00000000 00000001
第二步: 把-2的原碼找出來:
-2的原碼:
10000000 00000000 00000000 00000010
第三步: 把-2的反碼找出來:
-2的反碼:
11111111 11111111 11111111 11111101
第四步: 把-2的補碼找出來:
-2的補碼:
11111111 11111111 11111111 11111110
第五步: 1的補碼與-2的補碼相加:
00000000 00000000 00000000 00000001
+
11111111 11111111 11111111 11111110
=
11111111 11111111 11111111 11111111
第六步: 將計算結果的補碼轉換為原碼,反其道而行之即可(如果想將二進制轉換為十進制,必須得到二進制的原碼)
補碼:11111111 11111111 11111111 11111111
=
反碼:11111111 11111111 11111111 11111110
=
原碼:10000000 00000000 00000000 00000001
第七步: 將計算結果的二進制原碼 轉換 為十進制
二進制原碼:10000000 00000000 00000000 00000001 = 1*2^0 = -1
java中所有的數字變數都是有符號(正負)的?
這句話,還有點爭議。在Java中char類型是:16位Unicode字元,取值范圍 0 ~ 65535 , 不存在負數范圍,從這點上說:"char類型就是一個無符號數";
1.正數的原碼、反碼、補碼都一樣;
2.如果想將 二進制 轉為 十進制,必須使用 二進制的原碼;
感謝你看到這里,我是 程序員麥冬 ,一個java開發從業者,深耕行業六年了,每天都會分享java相關技術文章或行業資訊
歡迎大家關注和轉發文章,後期還有福利贈送!
7. +0或者-0的源碼、反碼、補碼
[+0]原碼=0000 0000, [-0]原碼=1000 0000
[+0]反碼=0000 0000, [-0]反碼=1111 1111
[+0]補碼=0000 0000, [-0]補碼=0000 0000
補碼沒有正0與負0之分。正數的反碼、補碼和其源碼相同,負數的反碼是其源碼,除符號位外其他位取反負數的補碼是取其反碼後加1。
詳細釋義:
所謂原碼就是二進制定點表示法,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。
(一)反碼表示法規定:
1、正數的反碼與其原碼相同;
2、負數的反碼是對正數逐位取反,符號位保持為1;
(二)對於二進制原碼10010求反碼:
((10010)原)反=對正數(00010)原含符號位取反= 反碼11101 (10010,1為符號碼,故為負)
(11101) 二進制= -2 十進制
(三)對於八進制:
舉例 某linux平台設置了默認的目錄許可權為755(rwxr-xr-x),八進製表示為0755,那麼,umask是許可權位755的反碼,計算得到umask為0022的過程如下:
原碼0755= 反碼 0022 (逐位解釋:0為符號位,0為7-7,2為7-5,2為7-5)
(四)補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
(7)源碼0是正擴展閱讀
轉換方法
由於正數的原碼、補碼、反碼表示方法均相同,不需轉換。在此,僅以負數情況分析。
(1) 已知原碼,求補碼。
例:已知某數X的原碼為10110100B,試求X的補碼和反碼。
解:由[X]原=10110100B知,X為負數。求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。
1 0 1 1 0 1 0 0 原碼
1 1 0 0 1 0 1 1 反碼,符號位不變,數值位取反
1 +1
1 1 0 0 1 1 00 補碼
故:[X]補=11001100B,[X]反=11001011B。
(2) 已知補碼,求原碼。
分析:按照求負數補碼的逆過程,數值部分應是最低位減1,然後取反。但是對二進制數來說,先減1後取反和先取反後加1得到的結果是一樣的,故仍可採用取反加1 有方法。
例:已知某數X的補碼11101110B,試求其原碼。
解:由[X]補=11101110B知,X為負數。
採用逆推法
1 1 1 0 1 1 1 0 補碼
1 1 1 0 1 1 0 1 反碼(末位減1)
1 0 0 1 0 0 1 0 原碼(符號位不變,數值位取反)
8. 0的原碼,補碼,反碼是什麼
0在計算機種分+0與-0,它們的原碼,補碼,反碼如下:
1、[+0]原碼=0000 0000, [-0]原碼=1000 0000;
2、[+0]反碼=0000 0000, [-0]反碼=1111 1111;
3、[+0]補碼=0000 0000, [-0]補碼=0000 0000。
在這里你會發現,+0和-0的補碼是一樣的,即0的補碼只有一種表示。
在計算機內,符號數有3種表示法:原碼、反碼和補碼。
(8)源碼0是正擴展閱讀:
原碼、補碼、反碼的轉換規則:
1、原碼的求法:
(1)對於正數,轉化為二進制數,在最前面添加一符號位(這是規定的),用1表示負數,0表示正數,如:0000 0000是一個位元組,其中左邊第一個0,0為符號位,表示是正數,其它七位表示二進制的值。
(2)正數的原碼、反碼、補碼是同一個數。
(3)對於負數,轉化為二進制數,前面符號位為1,1表示是負數。
2、計算原碼只要在轉化的二進制數前面加上相應的符號位就行了。
3、反碼的求法:
對於負數,將原碼各位取反,符號位不變。
4、補碼的求法:
對於負數,將反碼加上二進制的1即可,也就是反碼在最後一位上加上1就是補碼了。
9. C語言源碼生成目標文件後的二進制碼是原碼,反碼,還是補碼
當然是補碼了。計算機中所有的表示都是用補碼。因為正數的補碼就是它陪畝本身,所以正數在內存中既是原碼也是補碼,蘆嫌森負數肯定是補碼了哦。所以都是補碼。
你說的」反碼和原碼只用了介紹補碼為什麼出現,實際上已經不用了?「是因為為了引出補碼的概念和利用反碼和原碼如何求補碼,所以就介紹了反碼和原碼。對於負數
補碼=取反+1;
所以原碼=取反(補碼-1)
你看反碼是補碼和原碼之間的聯系,介紹它就是為了計算
對於正數,補碼=原碼=本身者禪,也是為了求補碼
10. 十進制的原碼、補碼
十進制-67的原碼是01000011、反碼是10111100和補碼是10111101。
轉換規則:
1、負整數的原碼為二進制前面加符號位;
-67=1000011(二進制)=11000011(原碼)
2、負整數的反碼=原碼各位取反(除了符號位外);
11000011(原碼)=10111100(反碼)
3、負整數的補碼=負整數的反碼+00000001;
10111100(反碼)=10111101(補碼)
(10)源碼0是正擴展閱讀:
已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:
⑴如果補碼的符號位為「0」,表示是一個正數,其原碼就是補碼。
⑵如果補碼的符號位為「1」,表示是一個負數,那麼求給定的這個補碼的補碼就是要求的原碼。
例:已知一個補碼為11111001,則原碼是10000111(-7)。
因為符號位為「1」,表示是一個負數,所以該位不變,仍為「1」。
其餘七位1111001取反後為0000110;再加1,所以是10000111。