複合位與

從 YFRobotwiki
跳到: 導覽搜尋


描述

複合位與(&=)經常被用來設置變量或者常量的某一位為0。代碼中,常被用作"清零"或者"重置"變量的某位。


語法

x &= y;       // 相当于 x = x & y; 


參數

x: 字符型,整型,長整型變量

y: 字符型,整型,長整型常量


示例

先來看下按位與(&)的用法

    0  0  1  1    运算数1
    0  1  0  1    运算数2
    ----------
    0  0  0  1    (运算数1 & 运算数2) - 返回值

任何數和0相與(&)後,所有位數都會清零,所有如果myByte是一個位變量

myByte & B00000000 = 0;

任何數和1相與(&)後,所有位數都不會發生改變,同樣有個變量myByte

myByte & B11111111 = myByte;

注意:由於我們可以用位操作數來處理位數據,所以在二進制常量的使用上會非常方便。某個二進制數可以用其他表達式來表示,只是不太方便理解。所以,B00000000這樣寫是為了看的更清楚點,不過它依然表示"0"。

所以,如果想要設置變量的某位為0或者1,而保持其他位不變的方法是,可與常量B11111100進行複合位與(&=)操作。

/*
   1  0  1  0  1  0  1  0    变量 
   1  1  1  1  1  1  0  0    掩码
   ----------------------
   1  0  1  0  1  0  0  0    返回值
  没有发生变化的位数
                     位数被清零
*/

我們用x來替換變量上的位值,可見結果是相同的:

   x  x  x  x  x  x  x  x    variable
   1  1  1  1  1  1  0  0    mask
   ----------------------
   x  x  x  x  x  x  0  0
  没有发生变化的位数
                     位数被清零

同理

myByte = B10101010;
 
myByte&= B11111100 == B10101000;



擴展閱讀

- |=(複合位或)
- &(位與)
- |(位或)




返回Arduino語法參考列表

更多建議和問題歡迎反饋至 YFRobot論壇