日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言中异或指令,C语言总结之异或运算的一些特性及巧妙应用

發布時間:2024/7/19 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中异或指令,C语言总结之异或运算的一些特性及巧妙应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:C語言總結之異或運算的一些特性及巧妙應用

1.一個數和自己做異或的結果是0。如果需要一個常數0,x86平臺的編譯器可能會生成這樣的指令:

xorl %eax, %eax。不管eax寄存器里的值原來是多少,做異或運算都能得到0,這條指令比同樣效果的

movl $0, %eax指令快,直接對寄存器做位運算比生成一個立即數再傳送到寄存器要快一些。

2.從異或的真值表中可以看出,和0做異或保持原值不變,和1做異或得到原值的相反值??梢岳眠@個特性配合掩碼實現某些位的翻轉,例如:

1. unsigned int a, b, mask = 1U << 6;

2. a = 0x12345678;

3. b = a ^ mask; /* flip the 6th bit */

3.如果a1 ^ a2 ^ a3 ^ … ^ an的結果是1,則表示a1、a2、a3…an之中1的個數為奇數個,否則為偶數個。這條性質可用于奇偶校驗(Parity Check),比如在串口通信過程中,每個字節的數據都計算一個校驗位,數據和校驗位一起發送出去,這樣接收方可以根據校驗位粗略地判斷接收到的數據是否有誤。

4. x ^ x ^ y == y,因為x ^ x == 0,0 ^ y == y。這個性質有什么用呢?我們來看這樣一個問題:交換兩個變量的值,不得借助額外的存儲空間,所以不能采用temp = a; a = b; b = temp;的辦法。利用位運算可以這樣做交換:

1. a = a ^ b;

2. b = b ^ a;

3. a = a ^ b;

分析一下這個過程。為了避免混淆,把a和b的初值分別記為a0和b0。第一行,a = a0 ^ b0;第二行,把a的新值代入,得到b = b0 ^ a0 ^ b0,等號右邊的b0相當于上面公式中的x,a0相當于y,所以結果為a0;第三行,把a和b的新值代入,得到a = a0 ^ b0 ^ a0,結果為b0。注意這個過程不能把同一個變量跟自己交換,而利用中間變量temp則可以交換。

0異或0=0,1異或0=1,0異或1=1,1異或1=0(同為0,異為1。

程序中有三種演算子:XOR、xor、 ^。

口訣:相同取0,相異取1。(二進制)

異或的巧妙應用

C語言中若需要交換兩個變量的值,除了通常使用的借用中間變量進行交換外,還可以利用異或,僅使用兩個變量進行交換,如:

a=a^b;

b=a^b;

a=a^b;

這樣就完成了a與b的交換。返回搜狐,查看更多

責任編輯:

總結

以上是生活随笔為你收集整理的c语言中异或指令,C语言总结之异或运算的一些特性及巧妙应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。