勤&快

          問題其實就是你期望的東西和你體驗的東西之間的差別
          隨筆 - 55, 文章 - 0, 評論 - 68, 引用 - 0
          數(shù)據(jù)加載中……

          用程序進行位運算

          計算機中存儲的數(shù)據(jù)是按照補碼存儲的。
          怎么樣計算補碼:
          1. 正數(shù)的補碼是其自身
          2. 負數(shù)的補碼是對原碼進行求反加一。如:-6的原碼是1000 0110,其中開始的1位符號為,表示是負數(shù);那么-6的反碼是除符號外按位求反,得,1111 1001;再加一,得,1111 1010。所以-6,在計算機中實際是1111 1010。也就是說,雖然你在屏幕上看到何輸入的都是-6,但是計算機對-6進行任何位操作,那么其實操作的是1111 1010。這里簡化了-6只用8位表示。
          我的計算機中int型為4字節(jié),那么5的二進制表示是00000000 00000000 00000000 00000101,那么-6的二進制表示是11111111 11111111 11111111 11111010。
           
          主要的位運算有:
           
          按位與 &
          按位左移 <<
          按位取反 ~
          按位或 |
          按位右移 >>
          按位異或 ^
          無符號右移 >>>
           
          這里以取反運算為例。對x取反,其結(jié)果表示為整數(shù)為 ~(x) = - (x+1)。如~(5) = -(5+1) = -6。
          下面解釋為什么:
          如上面所說,5的二進制表示是00000000 00000000 00000000 00000101,那么按位取反則為11111111 11111111 11111111 11111010,恰好是-6的補碼,所以,機器認為~(5) = -6。
          同樣,~(-6) = 5。同理,-6的表示是11111111 11111111 11111111 11111010,按位求反剛好是5的補碼。
           
          再如,按位左移。2147483645 = 01111111 11111111 11111111 11111101。
          i = 2147483645 << 1,得到的結(jié)果是 i = -6.因為左移一位之后的結(jié)果就01111111 11111111 11111111 111111010,恰好是-6的補碼。

          posted on 2007-04-05 12:59 daning 閱讀(452) 評論(0)  編輯  收藏 所屬分類: others

          主站蜘蛛池模板: 津南区| 鄂州市| 塘沽区| 诸暨市| 临高县| 平远县| 云安县| 祁东县| 巢湖市| 新和县| 澄江县| 林口县| 广宗县| 湖南省| 饶阳县| 尤溪县| 江门市| 定安县| 海淀区| 四会市| 年辖:市辖区| 通海县| 阆中市| 长沙县| 岑溪市| 清丰县| 大冶市| 金门县| 顺义区| 丰宁| 嘉鱼县| 定南县| 淮南市| 石泉县| 石城县| 西藏| 进贤县| 巫山县| 蒙城县| 武宣县| 乌鲁木齐市|