用程序進行位運算
計算機中存儲的數據是按照補碼存儲的。
怎么樣計算補碼:
- 正數的補碼是其自身
- 負數的補碼是對原碼進行求反加一。如:-6的原碼是1000 0110,其中開始的1位符號為,表示是負數;那么-6的反碼是除符號外按位求反,得,1111 1001;再加一,得,1111 1010。所以-6,在計算機中實際是1111 1010。也就是說,雖然你在屏幕上看到何輸入的都是-6,但是計算機對-6進行任何位操作,那么其實操作的是1111 1010。這里簡化了-6只用8位表示。
我的計算機中int型為4字節,那么5的二進制表示是00000000 00000000 00000000
00000101,那么-6的二進制表示是11111111 11111111 11111111 11111010。
主要的位運算有:
按位與 &
按位左移 <<
按位取反 ~
按位或 |
按位右移 >>
按位異或 ^
無符號右移 >>>
這里以取反運算為例。對x取反,其結果表示為整數為 ~(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,得到的結果是 i = -6.因為左移一位之后的結果就01111111 11111111
11111111 111111010,恰好是-6的補碼。
posted on 2007-04-05 12:59 daning 閱讀(447) 評論(0) 編輯 收藏 所屬分類: others