存儲器里存的都是補碼
1. 什麼是一個數的原碼,反碼,補碼
原碼,反碼,補碼針對的是定長二進制存儲器表示的有符號整數。
正數的原碼,反碼,補碼都相同。
負數的原碼最高位為1,其他位為整數的絕對值(零有+0、-0之分)。
負數的反碼最高位為1,其他位為整數的絕對值按位取反(零有+0、-0之分)。
負數的補碼最高位為1,其他位為整數的絕對值按位取反再加一(零沒有+0、-0之分,最常用)。
比如-1的原碼為0x80000001,反碼為0xFFFFFFFE,補碼為0xFFFFFFFF。
//---------
在計算絕對值、取反、加一的過程中,無論提升成多少位去計算,最後裝填時,都保留後幾位(符號位以外相應位數)。
2. 存儲器中用來表示存儲位元的形式有哪些
c的char數據屬於基本類型,基本類型其中還包括-整型,實型,枚舉類型! 數據在內存中是以二進制形式存放的。數值是以補碼表示的。 整型: 一個正數的補碼和其原碼的形式相同。而負數的補碼方式是將其絕對值的二進制形式「按位求反再加1」 實型: 在內存中佔4個位元組,是按照指數形式存儲的,實型數據分為小數部分和指數部分,分別存放!計算機用二進製表示小數部分,用2的冪次來表示指數部分! 字元型: 在內存中字元的存儲實際上是把字元相對應的ASCII代碼放到存儲單元中的。而這些ASCII代碼值在計算機中也是以二進制形式存放的。這個與整型的存儲很相似。因此這兩類之間的轉換也比較方便!c的char數據屬於基本類型,基本類型其中還包括-整型,實型,枚舉類型! 數據在內存中是以二進制形式存放的。數值是以補碼表示的。 整型: 一個正數的補碼和其原碼的形式相同。而負數的補碼方式是將其絕對值的二進制形式「按位求反再加1」 實型: 在內存中佔4個位元組,是按照指數形式存儲的,實型數據分為小數部分和指數部分,分別存放!計算機用二進製表示小數部分,用2的冪次來表示指數部分! 字元型: 在內存中字元的存儲實際上是把字元相對應的ASCII代碼放到存儲單元中的。而這些ASCII代碼值在計算機中也是以二進制形式存放的。這個與整型的存儲很相似。因此這兩類之間的轉換也比較方便!
3. 計算機中的數字是不是都是用補碼存放的
數字都是用補碼存放,原因很簡單,只要補碼與數字是一一對應的,
比如用原碼時,正0、0、負0都表示0 所以原碼不是一一對應
4. 關於計算機存儲的是補碼的問題
計算機存儲的都是補碼, 但是正數的補碼跟源碼是一樣的
129的補碼是0000 0000 1000 0001
賦值給s以後會被階段, 變成 1000 0001
這個時候最高位變成了1(最左邊的), 計算機就認為是個負數了, 所以按照負數的補碼看待, 就變成-127了
這個實際上屬於溢出
5. 既然計算機對數值的運算和存儲都是補碼形式,那無符號型數據沒有補碼,怎麼存儲的有點暈。
計算機對數值的運算和存儲都是以補碼形式(這句話沒毛病吧?)
--八位補碼,只有七位表示數值。
那無符號型數據是沒有補碼之說的,怎麼存儲?
--八位,都是數值,沒有正負號。
6. 電腦里的二進制數是以補碼的形式表示的。這怎樣理解呢能舉個例子嗎
在計算機中,對帶符號數可用真值和機器數兩個概念表示。所謂真值,就是帶有「+」、「-」號的實際數值;所謂機器數,則是把「+」、「-」符號數值化後所得到的計算機實際能表示的數。對於帶符號數,在計算機中表示正負號的最簡單方法是約定用
0 表示「+」,用 1 表示「-」。並規定二進制數的最高位作為符號位。機器數有三種碼表示,分別是原碼、反碼和補碼。匯編語言中,數都是以補碼的形式表示的。
正數的補碼與正數的原碼、反碼都一樣,最高位為符號位0,其餘位是數值位。求負數的補碼時,符號位為1,數值位在原碼的基礎上求反加1。
例如:十進制數+5和-5分別表示成二進制數原碼、反碼和補碼。
[+5]原=[+5]反=[+5]補=00000101B=05H
[-5]原=10000101B=85H
[-5]反=11111010B=FAH
[-5]補=11111011B=FBH
7. 既然計算機內部數據是以補碼存儲的,為什麼還要有原碼呢原碼和反碼存在的意義是什麼 初學者請教大家
正負數據,只是使用補碼來存放。
計算機中,並沒有原碼和反碼。
正負數,和補碼之間,有個關系式,可以直接互相轉換,並不需要繞道原碼反碼。
原碼和反碼,可以說,一無是處。
8. 為什麼數據在內存里是以補碼的形式存儲正數好理解,就是其本身。負數為何不能直接第一位1表示負,其後
補嗎是為了加減運算才出現的。。。我們都知道如果加一個負數,只要減去他對應的正數即可,
如 3+(-1)=3-1=2
計算機很笨,沒這種思維,他加法就是加法
3+(-3) 如果按你的方法表示負數 結果時 0x03+0x83=0x86 顯然不是0,因為計算機不會把加法變成減法。。。
那另一種就是取補嗎,0x03+0xfd=0x00 這樣就符合運算規則,這就是為什麼要有補嗎,-1 必須要比-2 在代碼上大1,
如果只是把首位變成1 ,那仍然不符合這個規則,0x01 0x02如果只是首位變符號,結論是 0x81 小於 0x82 這就是一個錯誤 -1<-2 不符合邏輯。。。CPU只是個機器,沒有智商可言。。。。
計算機對數字的處理 拋開符號位 00000000必須是最小的數,顯然拿單位元組來說 -128應該全0, 帶上符號那麼就是1000000是自小的數就是-128。。。。 -1+1應該為0 那麼 ff+1=0 所以ff就是-1。。。。
9. 補碼二進制計算機為什麼要用補碼存儲整型,關於
補碼的功能,類似於:
時針倒撥 3 小時,與正撥 9 小時,效果相同。
利用這種思路,計算機中的負數,也可以改為正數(即補碼)。
同時,減法運算,也就可以用加法運算代替了。
那麼,藉助於補碼,就能統一加減法,夠簡化計算機的硬體。
十進制比較容易理解:
25 - 1 = 24
25 + 99 = (一百) 24。
只要忽略進位,+99 就能代替-1。
+99 就稱為-1 的補數。
在這里用了 2 位 10 進制。
求補數的演算法:補數 = 負數 + 10^2。
通用的公式是:補數 = 負數 + 10^n。n 是位數。
-----------------------
計算機用二進制,補數,就改名為:補碼。
一個位元組,是 8 位 2 進制。
計數范圍是:0000 0000 ~ 1111 1111(十進制 255)。
計數周期是:2^8 = 256。
求補碼的演算法:負數的補碼=負數+2^n。
那麼:
-1 的補碼=-1 + 256 = 255 = 1111 1111。
-2 的補碼=-2 + 256 = 254 = 1111 1110。
。。。
例如,7-2 = 5,用補碼計算如下:
7 =0000 0111
[-2] 補 =1111 1110
---相加------------
得:(1)0000 0101= 5
舍棄進位,結果就完全正確。
藉助於補碼,負數就沒有了,從而就把「減法轉換為加法運算」。
-----------------------
補碼的來源,與原碼反碼毫無關系。
「原碼反碼取反加一、符號位也能參加運算」...
這些,都沒有什麼理論依據。
從「原碼取反加一」開始學習補碼,就弄不清楚「為什麼用補碼」。
10. 正數和負數在內存中是以什麼形式存儲的,都是補碼 為什麼呢
是以二進制方式儲存的,既補碼形式,正數前是0,負數前加1