上篇部落格簡單的介紹了計算機中原碼、反碼、補碼和移碼的表示方式(對於計算機為什麼要這樣還不是很明白,就好像知道這樣乙個東西,卻不知道為什麼要這樣。就好像乙個人你不了解他不是他的朋友,他的有些事情你就不知道他是為了什麼……
其實從原碼到補碼是乙個層層遞進的關係,也是乙個在錯誤中逐步發展的過程。也就是說利用原碼運算減法時出現的錯誤,為了解決出現了反碼運算,但是反碼運算時又出現了讓人不滿意的地方,於是為了更好的追求出現了補碼。
模、補數的出現
初中還是高中或者是小學讓我們知道了這樣一件事情:
把某物體左
旋轉90 度,和右
旋轉270度,在不考慮圈數的條件下,最終的位置是相同的;
270+90=360;
把分針倒撥 20 分鐘,和正撥 40分鐘,在不考慮時針的條件下,效果也是相同的;
20+40=60;
把數字 87,減去 25,和加上75,在不考慮百位數的條件下,效果也是相同的;
25+75=100;
……。總之都是會有一定的前提不考慮,可見它們的關係就是互補。而計算得到的360、60、100就是分別在不同情況下的模。知道模,就可以求乙個數的補數。
用補數代替原數,就可以用加法代替減法,出現乙個進製就是乙個模的值。
二進位制的模:
有多少位參加運算,模就是1的後面加上多少個0。
例如:2位二進位制數參加運算,模就是100;即2^2=4
8位二進位制數參加運算,模就是100000000;即2^8=256
二進位制的補碼:
求二進位制數的補數,目的是往計算機裡面存放。
一般情況下,都是以 8 位二進位制數來討論補碼。
計算時加上正數,是不需要進行求取補碼的;只有進行減法(或者加上負數),才需要對減數求補碼。
補碼就是按照 這個要求來定義的:
正數不變,負數即用模減去絕對值。
例如:x = -126,其補碼為 1000 0010,計算方法如下:
1 0000 0000
— 0111 1110
—————————————
1000 0010
其實就是為了儲存資料,為了計算簡單。既然補碼就可以做到這些了,那為什麼書上還有把原碼和反碼寫出來呢蠱惑人心呢?個人認為它們是沒有太多用處的,在計算機裡是不存在的,就是為了可以形象的說明二進位制是怎麼求出補碼的,只起到乙個中間計算過程的作用,要不一下子寫出乙個數的補碼也是要轉幾個彎的。
其實在剛進tgb的時候老師就講過這些東西,只是那時候並沒有聽老師的話自己下來畫一遍,寫一遍,以至於在軟考的階段對於它只有聽過卻沒有印象。那天公尺老師講演算法說他會自己實實在在的寫一遍計算的過程,作為我們,遇到這種事,還有什麼資格懶呢?其實,當你看似簡單的計算也許不懈寫一遍過程,但是沒有簡單的這一步,在難的地方也許就不會寫了,所以向老師學習吧!我們該學的還有太多……
關於資料表示,我也只是想加深一下印象,也許並不是太清楚,但卻是我自己的理解……另外推薦一篇太好的部落格,關於原碼、反碼、補碼和移碼的表示以及原因,都在裡面了(說的比我好太多,我也是後來才發現( ^_^ ))。
為什麼要使用原碼 反碼 補碼
前言 隨著學習計算機知識的加深,許多地方都遇到原碼 反碼 補碼。很多關於計算機的書籍都介紹原碼 反碼 補碼的表示方法,但是為什麼要用到原碼 反碼 補碼卻沒詳細說。為什麼要使用?它們的原理是什麼呢?我搜尋了許多資料,也查詢了許多書籍,終於弄明白了這個問題,收集整理如下。我們知道數值在計算機中表示形式為...
原碼 反碼 補碼和移碼
原碼 如果機器字長為n,那麼乙個數的原碼就是用乙個n位的二進位制數,其中最高位為符號位 正數為0,負數為1。剩下的n 1位表示概數的絕對值。例如 x 101011 x 原 00101011 x 101011 x 原 10101011 位數不夠的用0補全。ps 正數的原 反 補碼都一樣 0的原碼跟反碼...
原碼,反碼,補碼和移碼
注意 正數的原 反 補碼都一樣。0的原碼跟反碼都有兩個,因為這裡0被分為 0和 0。如果機器字長為n,那麼乙個數的原碼就是乙個n位的二進位制數有符號數,其中最高位為符號位 正數為0,負數為1。剩下的n 1位為數值位,表示真值的絕對值。凡不足n 1位的,小數在最低位右邊加零 整數則在最高位左邊加零來補...