神奇的位操作符

2021-07-12 04:57:43 字數 1685 閱讀 8784

相信學過c語言的小夥伴們都知道位操作符,正確的使用位操作符會讓我們寫出更高效率的程式

但不要忘記它也是有缺點的:只能用於整型和字元型資料。

速度:快於乘法 等同於加減法

*參與運算的資料以補碼形式出現!(不要弄錯啦!)

eg: 數字 -1

原碼:10000000 00000000 00000000 00000001

反碼:11111111 11111111 11111111 11111110

補碼:11111111 11111111 11111111 11111111

***有符號數隻改變量值部分 不改變符號位...

===  & 運算 ===

&運算通常用於二進位制數取位操作!

乙個數 & 1的結果就是取乙個數二進位制位的最末位

這可以用來判斷乙個整數的奇偶

eg: 0&1=0;

2&1=0;//注意此時只是取出2進製位的最末位!

=== | 運算  ===

| 運算通常用於二進位制特定位上的無條件賦值

乙個數 | 1的結果就是把二進位制最末位強行變成1,

如果需要把二進位制最末位變成0,對這個數 | 1 後再減一就可以了,

其實際意義就是把這個數強行變成最接近的偶數。

=== 3. ^  運算 ===

按位 ^ 運算

^ 運算的逆運算是它本身,也就是說兩次異或同乙個數最後結果不變,即(a ^ b) ^ b = a;

^ 運算可以用於簡單的加密

void swap(int a,int b);

此時我們就可以實現簡單的交換啦!是不是很簡單呢!

=== ~運算 ===

~ 運算的定義是把記憶體中的0和1全部取反。使用 ~ 運算時要格外小心,你需要注意整數型別有沒有符號。

如果 ~ 的物件是無符號整數,那麼得到的值就是它與該型別上界的差!

#include#includeint main()

=== << 運算 ===

a << b就表示把a轉為二進位制後左移b位(在後面添b個0)。

eg: 100的二進位制為1100100,而110010000轉成十進位制是400,

那麼100 >> 2 = 400。

a << b的值實際上就是a乘以2的b次方

通常認為a << 1比a * 2更快

因此程式中乘以2的操作請盡量用左移一位來代替。

定義一些常量可能會用到 << 運算。你可以方便地用1 << 16 - 1來表示65535。(2^16 -1);

很多演算法和資料結構要求資料規模必須是2的冪,此時可以用 << 來定義max_n等常量。

=== >>運算 ===

a >> b表示二進位制右移b位(去掉末b位),相當於a除以2的b次方(取整)。

我們也經常用》 1來代替/ 2,

比如折中查詢 、堆的插入操作等等。

>>代替除法運算可以使程式效率大大提高。

最大公約數的二進位制演算法用除以2操作來代替慢得出奇的mod運算,效率可以提高60%。

c語言操作符 位操作符 移位操作符

1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...

位運算操作符

與運算,二元操作符,對兩個操作員的每個二進位制位進行與運算,運算規則為 1 1 1 1 0 0 0 1 0 0 0 0 異或運算,二元操作符,對兩個操作員的每個二進位制位進行異或運算,運算規則為 1 1 0 1 0 1 0 1 1 0 0 0 或運算,二元操作符,對兩個操作員的每個二進位制位或運算,...

c 位操作符

我們知道,任何資訊在計算機中都是以二進位制的形式儲存的。位操作符就是對資料按二進位制進行運算的操作符。c 語言中的位操作符有 與 或 異或 取補 左移 右移 其中,取補只有乙個運算元,而其它的位操作符都有兩個運算元。這些運算都不會產生溢位。位操作符的運算元為整型或者是可以轉換為整型的任何其它型別。與...