1樓:Thirring
更新01--2020.9.20
從二進位制的角度談,其實二進位制自帶模的性質。以儲存單位——位元組,8位二進位制為例。
(255)1111 1111+(1)0000 0001=0000 0000 因為會出現溢位。所以就是等效為模256;256=0
又因為計算機只能算加法,所以在處理減法時只能用等效的方法。
如:2-1=1 = 2+(256-1) = 2+255=1
回到只能做加法的二進位制,對於計算機2-1是這樣算的:
(2)0000 0010+(255)1111 1111=0000 0001 (出現溢位)
所以利用溢位做了個等效,而此處1111 1111 與-1等效,為了方便理解便把1111 1111 稱為-1的補碼。這也解釋了,正值補碼為什麼就是自身;因為補碼對於計算機其實都是正值。
補碼是相對於人類而言的,計算機還是只做加法。人類認為的2-1,計算機做起來就是2+255。
在讀了這個問題下的兩個回答後,我對補碼有了更深入的理解。但是現存的答案不夠通俗,所以嘗試寫乙個簡單易懂的回答。
首先談幾個概念相關的東西。
1.計算機只能做加法。
這個情況下才催生出補碼來解決減法問題。
2.模概念相關。
具象化理解就是時鐘,12過後就是1。是乙個數的迴圈。
比如,11+2 得 1。那麼,6-1=6+(12-1)=5。
由此,減法變成了加法。
3.溢位
乙個位元組8位1111 1111 加1 會出現溢位,結果只有0000 0000。
那麼回到我們的-128;現在忘掉原、反、補碼的概念。我們來解決2-1。套用上面的套路:
在模是256時:
2-1=2+(256-1)=2+255=1
二進位制:
2:0000 0010 255:1111 1111
這時會發現-1補碼也是1111 1111
那-128=0-128=0+(256-128)=128
二進位制:
128:1000 0000
所以-128的補碼就是1000 0000
那呼之欲出乙個問題:為什麼模是256?
其實我們關於-128的問題應該反過來問,為什麼-128可以是1000 0000?因為-128還可以是
1 1000 0000(模為512時)。
所以,模是多少取決於你想得到的補碼位數。
2樓:寧cn
1. 計算機中所有數字以補碼形式儲存
2. 正數的補碼 = 原碼,負數的補碼 = 絕對值的原碼取反加一 = 負數的原碼除符號位外取反加1
3. 舉例來說:10的原碼00001010,10的補碼00001010,-10的原碼10001010,-10的補碼00001010->11110101->111101110或者10001010->11110101->11110110.
4. 計算機處理加法時完全用補碼進行。比如10 + -8 = 00001010 + 11111000 = (1溢位)00000010 = 2.
5. 計算機處理減法是完全用加法進行,比如10 - 8 = 10 + -8,然後結果同上。
為什麼感覺現在的主流是學計算機,IT,而不是金融?
桃李成蔭 金融門檻高啊。你能給我幾百萬,讓我練練手嗎?倒是學計算機,家裡還是能買起電腦。一些軟體,也能用綠色版,還有更多開發軟體,都是免費的。另外很多行業一樣。 清華 因為計算機和IT更需要智商,而且小哥哥多,即能讓自己116的智商發揮優勢又能和很多小哥哥談笑風生難道不是很快了嗎?況且他們說窮IT富...
為什麼感覺現在除了計算機專業,其他專業都是一無是處,難道事實真的如此嗎?
小數點 和專業無關,我是計算機專業,可是混了四年,毫無建樹,考上了計算機研究生,還不知道怎麼畢業,啥都不會,不管學什麼看你有沒有水平罷了 尚學堂官方 不不不,完全沒有這回事哈,不要覺得只有計算機專業很牛很強,其他專業同樣沒差,只不過是大多數的考生包括其家長乃至整個社會的大方向是在網際網路行業上而已,...
計算機的組合語言為什麼沒有中文的版本
裝風的小龍 什麼語言的版本都可以,這只是乙個編碼問題,最終翻譯完了以後交給CPU之類的晶元執行的還是代表0 1的電訊號。其實人們一開始程式設計的時候是用的紙帶 Punched tape Wikipedia 使用的乙個著名的編碼方案是ASCII,如果你要用中文程式設計的話,現在應該用utf 8之類的u...