初學c語言,著實為補碼,反碼,原碼這樣的術語傷了一番腦筋。
最近終於感覺弄明白了,趕緊記錄一下。
以32位數為例,無符號數的32位都代表正數或零,最大111…11,一共32個1,最小是000…000。
有符號數的正數只用31位,最高位是區分正負,最大數011111…111,共31個1,還包含0的情況。最大數加1,就變成100000…000,產生溢位,變作負數了,10000…000是最小的負數,絕對值最大的數。
記憶體裡的位模式都是一樣的,只是對它的解釋或者說翻譯不同。
讓計算機做加法比讓它做減法,從電路上來說實現起來要簡單,因此科學家就想辦法把減法轉換成做加法。
a - b = a + (-b)
-b很容易取得。
32位二進位制整數b,對它取反~b, b + ~b總是得到一串1。
比如1010000…000取反是0101111…111,加起來就是1111…111,再加上1就產生進製=100…0000,變成乙個33位的數了,最高位自動捨去,就等於0了。
b + ~b + 1 = 0, -b = ~b + 1。
a - b = a + ~b + 1是不是就容易了?
這是一種人為的設計,比較容易從硬體上實現,並沒有什麼什麼別的含義了,知道負數在記憶體中存在的形態就是它的絕對值取反再加1,因為包含了0,所以最大的正數比「最大」的負數小1,無法用-x的方式取得「最大」的負數,只能採用-x - 1.
據書上說,現在基本都用補碼表示,所以別的形式也不用研究了,知道點常識就可以了。
學習心得 我的學習心得
我是乙個已經步入中年的70後,離開校園已經20年了,因為當年的政策因素而未能圓我的大學夢,在20年的工作過程中總是因為缺少一張大學文憑而失去了很多機會,曾經也考慮過自考,但是乙個人去面對的時候總感覺心有餘而力不足。2018年3月份偶然讓我認識了尚德,原來自考還可以這樣學習。一直懷疑自己年紀大了記憶力...
學習心得 python學習心得
自從來了深圳工作以後,尤其是屢屢面試碰壁以後。發現其實自己的知識面很窄,做筆試題的時候絞盡腦汁還是漏洞百出,並不是不會做,而是出現一大堆不該有的失誤。每次被問道,對資料庫了解嗎?說一大堆看起來很高階的東西 好啊,那我們寫幾個sql語句吧。馬上完蛋了,沒了手冊關鍵字都記不起。了解哪幾種指令碼語言,sh...
對SOA架構的學習心得
本文只是作者在對 soa有了淺顯認識後進行的學習心得總結,內容肯定存在很多的理解偏差,希望同行能批評指正,並一起 共同學習提高。以下圖說明了產品,系統,模組,功能之間的關係。系統n系統2 系統1產品1 產品n模組n 模組3 模組2 模組1 功能1 功能2 功能3 功能4 功能n 產品是由不同的系統構...