Java Fly

          Java&Oracle
          隨筆 - 12, 文章 - 20, 評論 - 27, 引用 - 0
          數據加載中……

          補碼的原理及隨想

          補碼的原理及隨想 - [筆記]

          越早在課堂上學的東西,越給我以簡單的印象,忘得也越快。而事實上,它們往往是最富有智慧的,即便在我沒忘的時候,也沒有深刻地理解它們。

          嘛是補碼?不少書上扯一堆“取反加1之類的規則,很不著重點,我覺得核心在于:

          對于范圍為[0,M)的整數計量系統,其模為M。和為M的兩個數互為補數。

          如果有兩個整數a,b[0, M),那么f(a-b)==f(a+c),其中c= M-b,是b的補碼,f是一個映射,定義為:
          0<=x< M,f(x)=x;
          x>= M,f(x)=x % M;
          x<0,f(x)=f(M +x).
          其中%為取余運算(效果同編程語言中的取模運算)

          在計算機中,f是由溢出隱式實現的,所以天生就有a-b==a+c。這就把減運算轉化成了加運算。

          于是,為了便于執行減運算,計算機就把-b表示為其補碼c。

          假設機器字有n位,那么M=2n,c=2n-b。

          人在紙上怎么計算2n-b的二進制值?2n的原碼就是1后面跟了n0,直接用它減b的原碼不方便,先用2n-1的原碼(n1)減b的原碼,得到的結果加上1就是2n-b的值了——這就是“取反加1的由來。

          posted on 2007-11-01 10:18 Java Fly 閱讀(1955) 評論(4)  編輯  收藏

          評論

          # re: 補碼的原理及隨想  回復  更多評論   

          知其然,知其所以然,這種學習態度值得學習.
          2007-11-12 18:19 | 紫蘇

          # re: 補碼的原理及隨想[未登錄]  回復  更多評論   

          為什么好多教材都沒有提到模的概念,都是取反加1 這不是糊弄大家嗎?
          2008-01-10 11:52 | fox

          # re: 補碼的原理及隨想[未登錄]  回復  更多評論   

          當x<0時,f(x)=f(M-(-x)%M). 這樣才對吧。
          因為M+x仍有可能為復數。
          2008-09-22 23:12 | Tony

          # re: 補碼的原理及隨想  回復  更多評論   

          也許我們兩個所表達的關于補碼的理念應該結合一下,這樣會更加完善啊
          呵呵,歡迎討論啊
          http://blog.chinaunix.net/u2/86948/showart_1849617.html
          2009-03-11 00:40 | caocao

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 溧阳市| 浦东新区| 连城县| 百色市| 文成县| 哈密市| 卢氏县| 清新县| 礼泉县| 秦皇岛市| 丹阳市| 潮安县| 九寨沟县| 南木林县| 兴宁市| 万山特区| 望谟县| 长岛县| 安图县| 泽普县| 东安县| 文登市| 芮城县| 五家渠市| 布尔津县| 治县。| 囊谦县| 濮阳县| 佛教| 宁化县| 房山区| 兴化市| 菏泽市| 云梦县| 武山县| 朝阳县| 阜平县| 武邑县| 金昌市| 囊谦县| 吉隆县|