複合位與
出自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;
|
更多建議和問題歡迎反饋至 YFRobot論壇