位運算

 

位運算

 

首先

要明白位運算是在二進制中的運算方式,全部其餘進制的數在進行位運算時都要先轉化成二進制數再進行運算。
位運算主要包括按位與(&)、按位或(|)、按位異或(^)、取反( ~ )、左移(<<)、右移(>>)這幾種。
其中除了取反( ~ )之外,其餘的都是二目運算符,即要求運算符左右兩側均有一個運算量。markdown

補碼

補碼是爲了表示一個負數的二進制形式。
其轉化方式是先將負數當成正數轉化成二進制的形式再將二進制正數的各個位上取反再加上一。ui

例如-5
先求出5的二進制數 : 0000 0000 0101
而後將各個位上0變1,1變0 : 1111 1111 1010
最後再加1 : 1111 1111 1011
這裏5二進制下是101表示時前面全是0,這裏省略就只寫了幾個意思一下^ _ ^spa

按位與(&)

運算的兩個數,轉換算爲二進制後,進行與(&)運算。
當相應位上的數都是1時,該位取1,不然該爲0。.net

例如5 & -5
5 : 0000 0000 0101
-5 :1111 1111 1011
答案 : 0000 0000 00013d

按位或(|)

運算的兩個數,轉換爲二進制後,進行或(|)運算。
只要相應位上存在1,那麼該位就取1,若是都不爲1,就爲0。blog

仍是5 | -5
0000 0000 0101
1111 1111 1011
能夠看到每一位中其中一個都有1
答案 :1111 1111 1111token

按位異或(^)

運算的兩個數,轉換成二進制數後,進行異或(^)運算
若是相應位置上的數相同,該位取0,若是不一樣改位取1。get

5 ^ -5
0000 0000 0101
1111 1111 1011
答案: 1111 1111 1110it

同時任何數異或0都是其自己,一個數若是異或本身則等於0
這樣咱們能夠用異或來交換兩個數的值class

好比交換x,y的值
x ^= y; x = x ^ y
y ^= x; y = y ^ x ^ y
x ^= y; x = ( x ^ y ) ^ (y ^ x ^ y) ; --------- //最後一步 x ^= y 時 x = x ^ y; y = y ^ x ^ y

左移(<<)

將一個數二進制下的數向左移若干位,
好比 x << y 就是將二進制下的x 向左移 y 位

例 : 5 << 5
5 : 0000 0000 0101
5 << 5 : 0000 1010 0000
在10進制下就等於160

咱們能夠思考一下,在十進制中,一個數每乘一次10就向左進一位。
那麼在二進制中,同10進制同樣,二進制中每乘一次2就向左進一位,
那麼一個數左移x 就等價於一個數乘 2x

右移(>>)

將一個數在二進制下右移若干位
與左移用法相同

例 5 << 2
5:0000 0000 0101
5 << 2 : 0000 0000 0001
十進制下等於1

這裏與左移相似,十進制下每除10整數位就退一位
那麼右移就等價於除了幾回2
同時右移運算是向下取整

取反(~)

其實在說補碼的是後,取反就已經說了,就是將取反的數在二進制下的每一位取相反的數

5 : 0000 0000 0101
~5 : 1111 1111 1010

 


 

版權聲明:本文爲博主(BIGBIGPPT)原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處連接和本聲明。

本文連接: https://blog.csdn.net/BIGBIGPPT/article/details/88919783
相關文章
相關標籤/搜索