負3四位源碼
❶ -3的補碼怎麼算
-3的原碼:10000011
-3的反碼:11111100 除符號位,逐位求反
-3的補碼:11111101反碼加一
望採納
原碼:最高位符號位,正為0,負為1
其餘位即十進制轉二進制
人活一輩子,就活一顆心,心好了,一切就都好了,心強大了,一切問題,都不是問題。
人的心,雖然只有拳頭般大小,當它強大的時候,其力量是無窮無盡的,可以戰勝一切,當它脆弱的時候,特別容易受傷,容易多愁善感。
心,是我們的根,是我們的本,我們要努力修煉自己的心,讓它變得越來越強大,因為只有內心強大,方可治癒一切。
沒有強大的敵人,只有不夠強大的自己
人生,是一場自己和自己的較量,說到底,是自己與心的較量。如果你能夠打開自己的內心,積極樂觀的去生活,你會發現,生活並沒有想像的那麼糟糕。
面對不容易的生活,我們要不斷強大自己的內心,沒人扶的時候,一定要靠自己站穩了,只要你站穩了,生活就無法將你撂倒。
人活著要明白,這個世界,沒有強大的敵人,只有不夠強大的自己,如果你對現在的生活不滿意,千萬別抱怨,努力強大自己的內心,才是我們唯一的出路。
只要你內心足夠強大,人生就沒有過不去的坎
人生路上,坎坎坷坷,磕磕絆絆,如果你內心不夠強大,那這些坎坎坷坷,磕磕絆絆,都會成為你人生路上,一道道過不去的坎,你會走得異常艱難。
人生的坎,不好過,特別是心坎,最難過,過了這道坎,還有下道坎,過了這一關,還有下一關。面對這些關關坎坎,我們必須勇敢往前走,即使心裡感到害怕,也要硬著頭皮往前沖。
人生沒有過不去的坎,只要你勇敢,只要內心足夠強大,一切都會過去的,不信,你回過頭來看看,你已經跨過了多少坎坷,闖過了多少關。
內心強大,是治癒一切的良方
面對生活的不如意,面對情感的波折,面對工作上的糟心,你是否心煩意亂?是否焦躁不安?如果是,請一定要強大自己的內心,因為內心強大,是治癒一切的良方。
當你的內心,變得足夠強大,一切困難,皆可戰勝,一切問題,皆可解決。心強則勝,心弱則敗,很多時候,打敗我們的,不是生活的不如意,也不是情感的波折,更不是工作上的糟心,而是我們內心的脆弱。
真的,我從來不怕現實太殘酷,就怕自己不夠勇敢,我從來不怕生活太苦太難,就怕自己不夠堅強。我相信,只要我們的內心,變得足夠強大,人生就沒有那麼多雞毛蒜皮。
強大自己的內心,我們才能越活越好
生活的美好,在於追求美好的生活,而美好的生活,源於一顆強大的內心,因為只有內心強大的人,才能消化掉各種不順心,各種不如意,將陰霾驅散,讓美好留在心中。
心中有美好,生活才美好,心中有陽光,人生才芬芳。一顆陰暗的心,托不起一張燦爛的臉,一顆強大的心,可以美化生活,精彩人生,讓我們越活越好。
生活有點欺軟怕硬,如果你內心很脆弱,生活就會打壓你,甚至折磨你,如果你內心足夠強大,生活就會獎勵你,眷顧你,全世界都會對你和顏悅色。
❷ 機器數、真值、原碼、反碼是什麼意思啊
1、機器數
一個數在計算機中的二進製表示形式, 叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數0,負數為1。12
比如,十進制中的數 +3 ,計算機字長為8位,轉換成二進制就是0000 0011。如果是 -3 ,就是 1111 1101 。那麼,這里的 00000011 和 1111 1101 就是機器數。 機器數包含了符號和數值部分。
2、真值
因為第一位是符號位,所以機器數的形式值就不能很好的表示真正的數值。例如上面的有符號數 1111 1101,其最高位1代表負,其真正數值是
-3 而不是形肢寬棚式值253(1111
1101按無符號整數轉換成十進制等於253)。所以,為區別起見歷則,將帶符號位的機器數對應的真正數值稱為機器數的真值。巧旅
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –0111 1111 = –127;這里所說的比如-3二進制代碼為10000011,就是我們計算機裡面對-3表示的源碼。下面介紹源碼
首先說明一點
在計算機內,有符號數有3種表示法:原碼、反碼和補碼。
3、原碼
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進制
[+1]原 = 0000 0001
[-1]原 = 1000 0001
因為第一位是符號位, 所以若是8位二進制數,其取值范圍就是:
[1111 1111 , 0111 1111]
即[-127 , 127]
原碼是人腦最容易理解和計算的表示方式。
4 、反碼
反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
[+1] = [ 00000001 ]原碼 = [ 00000001 ]反碼;
[-1] = [ 10000001 ]原碼 = [ 11111110 ]反碼;
可見如果一個反碼表示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算。
什麼是二進制的補碼?
註明:正數的補碼與負數的補碼一致,負數的補碼符號位為1,這位1即是符號位也是數值位,然後加1
補碼借鑒的模概念,雖然理解起來有點晦澀難懂。可以跳過
模的概念:把一個計量單位稱之為模或模數。例如,時鍾是以12進制進行計數循環的,即以12為模。
在時鍾上,時針加上(正撥)12的整數位或減去(反撥)12的整數位,時針的位置不變。14點鍾在捨去模12後,成為(下午)2點鍾(14=14-12=2)。從0點出發逆時針撥10格即減去10小時,也可看成從0點出發順時針撥2格(加上2小時),即2點(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射為+2。由此可見,對於一個模數為12的循環系統來說,加2和減10的效果是一樣的;因此,在以12為模的系統中,凡是減10的運算都可以用加2來代替,這就把減法問題轉化成加法問題了(註:計算機的硬體結構中只有加法器,所以大部分的運算都必須最終轉換為加法)。10和2對模12而言互為補數。同理,計算機的運算部件與寄存器都有一定字長的限制(假設字長為16),因此它的運算也是一種模運算。當計數器計滿16位也就是65536個數後會產生溢出,又從頭開始計數。產生溢出的量就是計數器的模,顯然,16位二進制數,它的模數為2^16=65536。在計算中,兩個互補的數稱為「補碼」。比如一個有符號8位的數可以表示256個數據,最大數是0
1 1 1 1 1 1 1(+127),最小數1 0 0 0 0 0 0 0
(-128);那麼第255個數據,加2和減254都是一樣的效果得出的結果是第一個數據
,所以2和254是一樣的效果。對於255來說2和254是互補的數。
求一個正數對應補碼是一種數值的轉換方法,要分二步完成:
第一步,每一個二進制位都取相反值,即取得反碼;0變成1,1變成0。比如,00001000的反碼就是11110111。
第二步,將上一步得到的反碼加1。11110111就變成11111000。所以,00001000的二進制補碼就是11111000。也就是說,-8在計算機(8位機)中就是用11111000表示。
不知道你怎麼看,反正我覺得很奇怪,為什麼要採用這么麻煩的方式表示負數,更直覺的方式難道不好嗎?
二進制補碼的好處
首先,要明確一點。計算機內部用什麼方式表示負數,其實是無所謂的。只要能夠保持一一對應的關系,就可以用任意方式表示負數。所以,既然可以任意選擇,那麼理應選擇一種用的爽直觀方便的方式。
二進制的補碼就是最方便的方式。它的便利體現在,所有的加法運算可以使用同一種電路完成。
還是以-8作為例子。假定有兩種表示方法。一種是直覺表示法,即10001000;另一種是2的補碼表示法,即11111000。請問哪一種表示法在加法運算中更方便?隨便寫一個計算式,16
+ (-8) = ?16的二進製表示是 00010000,所以用直覺表示法,加法就要寫成:
00010000
+10001000原碼形式-8
---------
10011000
可以看到,如果按照正常的加法規則,就會得到10011000的結果,轉成十進制就是-24。顯然,這是錯誤的答案。也就是說,在這種情況下,正常的加法規則不適用於正數與負數的加法,因此必須制定兩套運算規則,一套用於正數加正數,還有一套用於正數加負數。從電路上說,就是必須為加法運算做兩種電路。所以用原碼表示負數是不行的。
現在,再來看二進制的補碼表示法。
00010000
+11111000補碼形式-8
---------
100001000
可以看到,按照正常的加法規則,得到的結果是100001000。注意,這是一個9位的二進制數。我們已經假定這是一台8位機,因此最高的第9位是一個溢出位,會被自動捨去。所以,結果就變成了00001000,轉成十進制正好是8,也就是16 + (-8) 的正確答案。這說明了,2的補碼表示法可以將加法運算規則,擴展到整個整數集,從而用一套電路就可以實現全部整數的加法。
二進制補碼的本質,本質是用來表示負整數的
在回答二進制補碼為什麼能正確實現加法運算之前,我們先看看它的本質,也就是那兩個求補碼步驟的轉換方法是怎麼來的。下面描述了一個正數怎麼求它對應負數在計算機的表達方式。比如128,正數為10000000,但是驚奇的發現-128也是10000000。但是這里由於屬於數據類型的限定,第八位同樣一個1代表不同的含義,前面的 1是數值位,後面數的 1是符號位。
要將正數轉成對應的負數,其實只要用0減去這個數就可以了。比如,-8其實就是0-8。用模數的概念解釋如下圖
為什麼正數加法也適用於二進制的補碼?
實際上,我們要證明的是,X-Y或X+(-Y)可以用X加上Y的2的補碼(-Y)完成。
Y的二進制補碼等於(11111111-Y)+1。所以,X加上Y的2的補碼,就等於:X + (11111111-Y) + 1;我們假定這個算式的結果等於Z,即 Z = X + (11111111-Y) + 1。
接下來,分成兩種情況討論。
第一種情況,如果X小於Y,那麼Z是一個負數。這時,我們就對Z採用補碼的逆運算,就是在做一次求補碼運算,求出它對應的正數絕對值,只要前面加上負號就行了。所以,
Z = -[11111111-Z+1] = -[11111111-(X + (11111111-Y) + 1)+1)] = X -
Y;這里如果X Y Z都是無符號型的,且X < Y 那麼Z 最終得到的數是|X-Y|距離的絕對值了,比如X=1,Y=
255,那麼Z=2,因為從255到1隻要加兩次就到了。這里你不要問我為什麼,這里就用到上面的模概念。
第二種情況,如果X大於Y,這意味著Z肯定大於11111111,但是我們規定了這是8位機,最高的第9位是溢出位,必須被捨去,捨去相當於減去嗎!所以減去100000000。所以,
Z = Z - 100000000 = X + (11111111-Y) + 1 - 100000000 = X - Y
這就證明了,在正常的加法規則下,可以利用2的補碼得到正數與負數相加的正確結果。換言之,計算機只要部署加法電路和補碼電路,就可以完成所有整數的加法。
❸ 二進制補碼怎麼計算的
1、正數的補碼表示:
正數的補碼 = 原碼
負數的補碼 = {原碼符號位不變} + {數值位按位取反後+1} or
= {原碼符號位不變} + {數值位從右邊數第一個1及其右邊的0保持不變,左邊安位取反}
以十進制整數+97和-97為例:
+97原碼 = 0110_0001b
+97補碼 = 0110_0001b
-97原碼 = 1110_0001b
-97補碼 = 1001_1111b
2、純小數的原碼:
純小數的原碼如何得到呢?方法有很多,在這里提供一種較為便於筆算的方法。
以0.64為例,通過查閱可知其原碼為0.1010_0011_1101_0111b。
操作方法:
將0.64 * 2^n 得到X,其中n為預保留的小數點後位數(即認為n為小數之後的小數不重要),X為乘法結果的整數部分。
此處將n取16,得
X = 41943d = 1010_0011_1101_0111b
即0.64的二進製表示在左移了16位後為1010_0011_1101_0111b,因此可以認為0.64d =0.1010_0011_1101_0111b 與查詢結果一致。
再實驗n取12,得
X = 2621d = 1010_0011_1101b 即0.64d =0.1010_0011_1101b,在忽略12位小數之後的位數情況下,計算結果相同。
3、純小數的補碼:
純小數的補碼遵循的規則是:在得到小數的源碼後,小數點前1位表示符號,從最低(右)位起,找到第一個「1」照寫,之後「見1寫0,見0寫1」。
以-0.64為例,其原碼為1.1010_0011_1101_0111b
則補碼為:1.0101_1100_0010_1001b
當然在硬體語言如verilog中二進製表示時不可能帶有小數點(事實上不知道哪裡可以帶小數點)。
4、一般帶小數的補碼
一般來說這種情況下先轉為整數運算比較方便
-97.64為例,經查詢其原碼為1110_0001.1010_0011_1101_0111b
筆算過程:
-97.64 * 2^16 = -6398935 =1110_0001_1010_0011_1101_0111b,其中小數點在右數第16位,與查詢結果一致。
則其補碼為1001_1110_0101_1100_0010_1001b,在此採用負數的補碼 = {原碼符號位不變} + {數值位按位取反後+1} 方法
5、補碼得到原碼:
方法:符號位不動,幅度值取反+1or符號位不動,幅度值-1取反
-97.64補碼 =1001_1110(.)0101_1100_0010_1001b
取反 =1110_0001(.)1010_0011_1101_0110b
+1 =1110_0001(.)1010_0011_1101_0111b 與查詢結果一致
6、補碼的拓展:
在運算時必要時要對二進制補碼進行數位拓展,此時應將符號位向前拓展。
-5補碼 = 4'b1011 = 6'b11_1011
ps.原碼的拓展是將符號位提到最前面,然後在拓展位上部0.
-5原碼 = 4『b』1101 = 6'b10_0101,對其求補碼得6'b11_1011,與上文一致。
(3)負3四位源碼擴展閱讀:
計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位,三種表示方法各不相同。
在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。
❹ +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)負3四位源碼擴展閱讀
轉換方法
由於正數的原碼、補碼、反碼表示方法均相同,不需轉換。在此,僅以負數情況分析。
(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 原碼(符號位不變,數值位取反)
❺ 二進制的原碼、補碼、反碼詳解
計算機中,並沒有原碼和反碼,只是使用補碼,代表正負數。
使用補碼的意義:可以把減法或負數,轉換為加法運算。從而簡化計算機的硬體。
------------
比如鍾表,時針轉一圈,周期是 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 的補碼
舍棄進位,只保留八位,作為結果即可。
這就是:使用補碼,加法就代替了減法。
所以,在計算機中,有一個加法器,就夠用了。
原碼和反碼,都沒有這種功能。
------------
原碼和反碼,毫無用處。計算機中,根本就沒有它們。
❻ 計算機的原碼,反碼,補碼是怎麼回事可以舉例說明嗎
原碼、反碼和補碼是計算機中對數字二進制的三種表示方法。
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。
(6)負3四位源碼擴展閱讀
原碼、反碼、補碼的轉換方法如下:
(1) 已知原碼,求補碼。
例:已知某數X的原碼為10110100B,試求X的補碼和反碼。
首先通過原碼的首位確定該數字的正負,若為正數,反碼與原碼相同,補碼比原碼在末尾加1;若為負數,求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。
(2)已知補碼,求原碼。
按照求負數補碼的逆過程,數值部分應是最低位減1,然後取反。但是對二進制數來說,先減1後取反和先取反後加1得到的結果是一樣的,故仍可採用取反加1的方法。
❼ 怎麼求一個負數的原碼和補碼
補碼,來自於:補數。
一般的常識:
鍾表時針,倒撥 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)代替 。
正數,不需要變換,直接運算即可。
--------
在計算機中,負數,就是用補碼存儲、計算的。
原碼和反碼,毫無用處,它們在計算機中都不存在。