C语言中如何提取出一个字节的八位各自的状态?

一个字节由八位组成,每位不是0就是1,可以表示8个逻辑状态,如何判断出一个字节的各位是0还是1,C语言中如何处理,请高手赐教。... 一个字节由八位组成,每位不是0就是1,可以表示8个逻辑状态,如何判断出一个字节的各位是0还是1,C语言中如何处理,请高手赐教。 展开
 我来答
Asterix_Zhang
2007-12-24
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
Port I/O操作常用写法:定义8个位域,并且和一个Char放到联合体中。

简单写一下:

位域用楼上的写法就行

union {
_aaa testBit;
unsigned char ucTestByte;
} P1;

首先把字节整体赋值,比如0xAA。
P1.ucTestByte = 0xAA;

则可直接使用各Bit进行判断,如:
if ( P1.testBit.a1 == 0 ) {
.....;
}

当然也可以直接对某一位赋值,如:
P1.testBit.a1 = 0;
则P1.ucTestByte变成0xAB;

位域不建议定义成a1-a8,最好是a0-a7,或bit0-bit7。

不编程已好久,具体写法可能不正确,但思路没问题,谨供参考。
nalanqx
2007-12-24 · TA获得超过1176个赞
知道小有建树答主
回答量:755
采纳率:0%
帮助的人:614万
展开全部
我不知道有没有直接的位运算算符能直接算出来,我自己印象是没有的。

其它的替代方法,我提供一种算法啊,把指向这个字节的那个指针强制转换成指向布尔型变量的指针,读出这个指针指向的数据,第一位出来了,指针自加1,再读,读出第二位,以此类推。。。。

问题是,我同样不记得C语言里怎么定义布尔变量。。。。

当然有种最笨的办法,指针类型强制转换为CHAR,再用%b(记不清楚,反正你就用格式化输出让它输出2进制格式就行)输出来。。。然后自己看吧。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
L_o_o_n_i_e
推荐于2016-01-13 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5190万
展开全部
按位与.

unsigned char a;
int r[8];

r[0] = a & 0x01; // 最低位
r[1] = ( a & 0x02) >> 1;
r[2] = ( a & 0x04) >> 2;
r[3] = ( a & 0x08) >> 3;
r[4] = ( a & 0x10) >> 4;
r[5] = ( a & 0x20) >> 5;
r[6] = ( a & 0x40) >> 6;
r[7] = ( a & 0x80) >> 7; // 最高位
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liuxinling_06
2007-12-24 · TA获得超过1289个赞
知道小有建树答主
回答量:345
采纳率:100%
帮助的人:423万
展开全部
这个是比较简单的办法:
通过构建数据结构来完成位操作,代码如下:

typedef struct _aaa
{
unsigned char a1 :1;
unsigned char a2 :1;
unsigned char a3 :1;
unsigned char a4 :1;
unsigned char a5 :1;
unsigned char a6 :1;
unsigned char a7 :1;
unsigned char a8 :1;
}aaa;
main()
{
unsigned char b;
b=60;
printf("%d,%d,%d,%d,%d,%d,%d,%d",((aaa *)&b)->a8,((aaa *)&b)->a7,((aaa *)&b)->a6,((aaa *)&b)->a5,((aaa *)&b)->a4,((aaa *)&b)->a3,((aaa *)&b)->a2,((aaa *)&b)->a1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hhog1225
2007-12-24 · 超过17用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:51.8万
展开全部
联合+位段
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式