复合位与
来自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论坛