❶ 負數在24c02中是怎麼存儲的
負數在24c02中是以補碼方式存儲的,和在內存儲器中是一樣的。
2402一個地址存8位,在存16位數的時候應該8位8位的存,具體的方法是:
把a的高八位右移八次變成低八位後強制將他轉化成一個unsigned char 寫入相應地址;然後將低八位強制轉換成unsigned char 再次寫入。
讀取的時候先讀取高八位放入一個unsigned int中,unsigned int左移八位後或上再次讀取出的低八位。
❷ 二進制中的負數在計算機的儲存方式
二進制的儲存中都是用的補碼,正數的原碼、反碼和補碼相同,負數的原碼是最高位為1,反碼最高位不變,其餘各位取反,補碼為其反碼+1。比如說:-1的原碼是10000001(省略幾個零),反碼是11111110,補碼就是11111111。~_~我現在C語言學得很好的哦,問我就不會錯了。
❸ 正數和負數在內存中是以什麼形式存儲的,都是補碼 為什麼呢
正數和負數在內存中是以什麼形式存儲的,都是補碼? 為什麼呢?
----------------------
為什麼採用補碼?
最終目的,就是為了「簡化硬體」。
其實,補碼,還是很好理解的。
但是,從「原碼反碼取反加一」開始學,就理解不了了。
----------------------
計算機,每次進行計算,位數,是固定的。
八位的計算機,參加計算的,就只有八位二進制數。
16 位機、32 位機、64 位機 ...,也都是雷同的。
那麼:
數值 0,八位機存放的是:0000 0000,這沒有疑問吧?
數值 +1,就是 0+1。即:0000 0001,你可以理解吧?
數值-1,那顯然就是 0-1 了。
你用二進制算算看,差,是多少?
忽略借位,八位的差,就是:1111 1111 (十進制 255)。
255,這就是被稱為:-1 的補碼。
數值-X,怎麼存放?
那就按照 0-X 算唄!肯定可以得出這種正數的結果。
負數(-X) 的補碼,一定是個正數。
---------------------
補碼,是一個「代替負數計算」的正數。
這說法,對嗎?
你可以驗算一下。
比如,等式:1-1 = 0,顯然是成立的。
轉換為補碼:[+1]補 + [-1]補 = [0]補,也必須成立。
代入數值,計算如下:
0000 0001+1111 1111 = (1) 0000 0000
你舍棄了進位,這等式就成立了。
這說明:
用補碼(正數),就可以代替負數。
同時,加法,也就代替了減法運算。
但是,進位,必須舍棄。
另外,正數和令,就不存在轉換成補碼的問題了。
當然,也可以說,正數,本身就是補碼。
採用了補碼之後,就能簡化演算法,由此也就可以簡化硬體。
---------------------
常見的問題:為什麼數據在內存里是以補碼的形式存儲?
正確答案是:簡化演算法,從而簡化硬體。
這也就是:補碼存在的意義。
補碼的理論,就是這么簡單。
老外算術不行,二進制運算,弄不利索。
這才編造了「原碼反碼取反加一符號位不變」。
而計算機中,根本就不用原碼和反碼。
我們的計算機老師腦子不好用,被老外騙得滴溜滴溜轉。
跟著老外繞了老大一圈,也講不明白「補碼的存在意義」。
學生學完了,也不知道:為什麼數據在內存里是以補碼的形式存儲?
------------------------
如果已知計算機的二進制數,怎麼求它代表的數值呢?
數值,小學學過為兩類:自然數、整數。
自然數,即 0 ~ ∞,在計算機中,稱為:無符號數。
整數,包括「正整數負整數和零」,稱為:帶符號數。
計算機中的 n 位二進制數,每一位,都對應一個十進制數。
如果 n = 8,每一位對應的十進制數則是:
128、64、32、16、8、4、2、1。
注意:其中的最高位,對於「帶符號數」來說,則是-128。
-------------
例如,一個八位的補碼是:1000 1011。
如果是「帶符號數」,其首位,就是-128。
其餘的位,都是正數。
那麼,各位之和,就是:-128 + 8 + 2 + 1 = 117。
如果是「無符號數」,其首位,就是 128。
各位之和,就是:128 + 8 + 2 + 1 = 139。
--------------
例如,另一個八位的補碼是:0000 1011。
首位是 0?這就不用關心有無符號了。
其代表的數值,就是:8 + 2 + 1 = 11。
❹ 負數在內存中的二進制形式怎樣存儲
負數在內存中是以補碼的形式儲存的,先寫出該負整數的原碼,然後將原碼除符號位以外的各位取反,得到反碼,再將反碼加一,得到補碼,即為該負數的二進制儲存形式