单片机C语言中Y&=1; X&=15; if(Y)X|=0x40; X|=0x80 什么意思

如题所述

逐句解释如下:
1 Y&=1;
等效于
Y=Y&1;
即取Y最低位的二进制值,赋值给Y。

2 X&=15;
等效于
X=X&15;
15的二进制值为1111,所以这里是取X的最低四位值(0~3位),赋值给X。

3 if(Y)X|=0x40;
当Y值为真时,执行X|=0x40; 即原始的Y值最低位为1,则执行该句。
X|=0x40;等效于
X=X|0x40, 即将X的第6位赋值为1。

4 X|=0x80;
等效于
X=X|0x80;
即将X的第7位,也就是最高位赋值为1。

综上,这几句代码的含义总结为:
X的低四位保持不变,第4,5两位赋值为0,第6位赋值为Y的最低位,最高位赋值为1。
Y值赋值为原本Y的最低位。
简化可以写作:
Y&=1;
X&=0x8F|(Y<<6);
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-06-12
0x80的二进制是10000000
add&0x80 == 1 也就是add & 0x80 !=0
也就是add的二进制形式的第一位必须是1,不能是0
因为不管add值是多少,假如是0xxxxxxx的话(x可能是0可能1)
那么0xxxxxxx & 10000000 == 0
只有add是1xxxxxxx(x可能是0,可能是1)的时候,1xxxxxxx & 10000000 !=0
&是位与运算,2个操作数的二进制数对应的每一位进行与运算,1&1=1,1&0=0,0&1=0,0&0=0追问

非常感谢您详细的回答   您说的我都懂  只是不会用  就想找人一条指令用一两句话翻译就懂了

本回答被网友采纳
相似回答