歡迎來到培訓(xùn)無(wú)憂網(wǎng)!

全國(guó)切換

咨詢熱線 400-001-5729

位置:培訓(xùn)無(wú)憂網(wǎng) > 新聞資訊 > 電腦/IT > c語(yǔ)言 >  學(xué)習(xí)C語(yǔ)言了解下異或運(yùn)算特性及應(yīng)用

學(xué)習(xí)C語(yǔ)言了解下異或運(yùn)算特性及應(yīng)用

來源:達(dá)內(nèi)教育 發(fā)布人:星星

2022-01-11 14:43:19|已瀏覽:179次

C語(yǔ)言異或運(yùn)算

      1、一個(gè)數(shù)和自己做異或的結(jié)果是0。如果需要一個(gè)常數(shù)0,x86平臺(tái)的編譯器可能會(huì)生成這樣的指令:xorl %eax, %eax。不管eax寄存器里的值原來是多少,做異或運(yùn)算都能得到0,這條指令比同樣效果的;movl $0, %eax指令快,直接對(duì)寄存器做位運(yùn)算比生成一個(gè)立即數(shù)再傳送到寄存器要快一些。

      2、從異或的真值表中可以看出,和0做異或保持原值不變,和1做異或得到原值的相反值?梢岳眠@個(gè)特性配合掩碼實(shí)現(xiàn)某些位的翻轉(zhuǎn),例如:1.unsigned int a, b, mask = 1U << 6; 2.a = 0x12345678; 3.b = a ^ mask; /* flip the 6th bit */ 
      3、如果a1 ^ a2 ^ a3 ^ … ^ an的結(jié)果是1,則表示a1、a2、a3…an之中1的個(gè)數(shù)為奇數(shù)個(gè),否則為偶數(shù)個(gè)。這條性質(zhì)可用于奇偶校驗(yàn)(Parity Check),比如在串口通信過程中,每個(gè)字節(jié)的數(shù)據(jù)都計(jì)算一個(gè)校驗(yàn)位,數(shù)據(jù)和校驗(yàn)位一起發(fā)送出去,這樣接收方可以根據(jù)校驗(yàn)位粗略地判斷接收到的數(shù)據(jù)是否有誤。
      4、 x ^ x ^ y == y,因?yàn)閤 ^ x == 0,0 ^ y == y。這個(gè)性質(zhì)有什么用呢?我們來看這樣一個(gè)問題:交換兩個(gè)變量的值,不得借助額外的存儲(chǔ)空間,所以不能采用temp = a; a = b; b = temp;的辦法。利用位運(yùn)算可以這樣做交換:1.a = a ^ b; 2.b = b ^ a; 3.a = a ^ b; 
      分析一下這個(gè)過程。為了避免混淆,把a(bǔ)和b的初值分別記為a0和b0。第一行,a = a0 ^ b0;第二行,把a(bǔ)的新值代入,得到b = b0 ^ a0 ^ b0,等號(hào)右邊的b0相當(dāng)于上面公式中的x,a0相當(dāng)于y,所以結(jié)果為a0;第三行,把a(bǔ)和b的新值代入,得到a = a0 ^ b0 ^ a0,結(jié)果為b0。注意這個(gè)過程不能把同一個(gè)變量跟自己交換,而利用中間變量temp則可以交換。
       0異或0=0,1異或0=1,0異或1=1,1異或1=0(同為0,異為1。程序中有三種演算子:XOR、xor、 ^。口訣:相同取0,相異取1。(二進(jìn)制)

       C語(yǔ)言中若需要交換兩個(gè)變量的值,除了通常使用的借用中間變量進(jìn)行交換外,還可以利用異或,僅使用兩個(gè)變量進(jìn)行交換,如:a=a^b;b=a^b;a=a^b;這樣就完成了a與b的交換。

        本文由培訓(xùn)無(wú)憂網(wǎng)達(dá)內(nèi)教育專屬課程顧問老師整理發(fā)布,更多C語(yǔ)言課程信息可關(guān)注培訓(xùn)無(wú)憂網(wǎng)C語(yǔ)言培訓(xùn)頻道或添加老師微信:15033336050

      注:尊重原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處和鏈接 http://elsolbar.com/news-id-14645.html 違者必究!部分文章來源于網(wǎng)絡(luò)由培訓(xùn)無(wú)憂網(wǎng)編輯部人員整理發(fā)布,內(nèi)容真實(shí)性請(qǐng)自行核實(shí)或聯(lián)系我們,了解更多相關(guān)資訊請(qǐng)關(guān)注c語(yǔ)言頻道查看更多,了解相關(guān)專業(yè)課程信息您可在線咨詢也可免費(fèi)申請(qǐng)?jiān)囌n。關(guān)注官方微信了解更多:150 3333 6050

留下你的信息,課程顧問老師會(huì)一對(duì)一幫助你規(guī)劃更適合你的專業(yè)課程!
  • 姓名:

  • 手機(jī):

  • 地區(qū):

  • 想學(xué)什么:

  • 培訓(xùn)無(wú)憂網(wǎng)
免 費(fèi) 申 請(qǐng) 試 聽
提交申請(qǐng),《培訓(xùn)無(wú)憂網(wǎng)》課程顧問老師會(huì)一對(duì)一幫助你規(guī)劃更適合你的專業(yè)課程!