c语言中的a&0x80是什么意思

如题所述

& 是按位与运算 ox表示十六进制数
关于按位与运算,先要将其他的进制数转化为二进制数,然后计算
ox80转化为二进制就是10000000
比如a是十进制数15,转化为二进制数就是
00001111
10000000
上下比较没有相同的位,结果就为0

刚刚查了sbuf,原来是什么单片机啊,虽然没有学过,但刚刚的回答应该没错
计算机都是以二进制的方式储存数据追问

哦哦...你说的按位与这个我看明白了.如果SBUF中的数据是A,1,3,5呢
它和0x80如何计算的呢,我在单片机上试了一下.好象不对.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-20
如果是单片机中用到的话,其实是取位用的,其结果就能知道bit7(1000 0000)的状态
第2个回答  2012-06-12
你这代码是实现什么功能啊,写得可真累人呐。。追问

SBUF串口寄存器,收到串口数据想把这个数据赋值给一个数组a.
就想把这个收到串口数据赋值给一个数组a
收到的数据格式为A,1,3,6,8,.........

追答

这格式没见过。没看懂啥意思,
b = SBUF;
for(i = 0; i < 8; i++){
if(b & (1 << i)){
a[i] = 1;
}else {
a[i] = 0;
}
}
//比你网上找的简单吧//但是不知是不是你要的功能。

追问

A,1,3,6,8这个是用户在PC上用串口输入的,单片机接收这个字符串,放到a数组里.
你写的这个a数组全都是1和0了.

追答

哦,你是要接收字符串呐。那你在网上找的那个程序就是我写的那个意思。。把一个字节放到8个元素里去了。那程序就不对。用串口接收字节流,我通常用一个循环型的数组来接收。
ucahr rxBuf[100] = {0};
static int Indx = 0; //接收时,放到这个位置
static int Outdx = 0; //读取时,从这里开始。
void reciveData(uchar dat){ //从串口接收数据放到接收缓存里
rxBuf[Indx] = dat;
Indx++;
if(Indx >= 100)
Indx = 0;
}

//用串口中断来接收数据(51单片机)
void Rxd() interrupt 4
{
uchar b;
b = SBUF;
SI = 0;
reciveData(b);
}
//后面还有。。
void ReadBuf(){
if(Indx != Outdx){ //缓存中有数据
a = rxBuf[Outdx]; //a 是你要看的
Outdx++;
if(Outdx >= 100)
Outdx = 0;
}
}
//再有就是协议的,帧结构之类的。

本回答被提问者采纳
第3个回答  2012-06-12
你是在用C语言硬件编程吧追问

b = SBUF;
flag = 0x80;
for(i = 0; i>(7-i);//这个是什么意思.
flag>>=0x01;
P1 = a[i];
delay(); // 这个要看实际情况
}

是不是把b里按位取出来 赋给a数组啊

追答

你的P1是什么啊

追问

P1是c51单片机的一个输入端.你可以不考虑P1.
SBUF串口寄存器,收到串口数据想把这个数据赋值给一个数组a.
代码我也是网上找的...

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网