菜鸟问下位域的问题

yuanlaosi 2011-07-09 03:47:25
typedef union
{
unsigned char a;
struct
{
unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
}bit;
}IO;
问下是不是在定义的时候内存中的每一位就是按照我定义的时候的顺序定义的。如何验证,我现在没的能力检测!
我现在实现的目的就是访问一个字节的每一位,每一位之间互不影响!问下大家有没的好的办法!
...全文
39 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
demobin 2011-07-09
  • 打赏
  • 举报
回复
用指针取出它的值就能判断了
AnYidan 2011-07-09
  • 打赏
  • 举报
回复
提醒一下,位域依赖于平台,移植性不好
yuanlaosi 2011-07-09
  • 打赏
  • 举报
回复
验证是的是按照那个顺序的!有点兴奋!~
至善者善之敌 2011-07-09
  • 打赏
  • 举报
回复
看明白了,就结贴吧
至善者善之敌 2011-07-09
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

typedef union
{
unsigned char a;
struct
{
unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
}bit;
}IO;
void main()
{
IO io;
io.a='P';//0x50-->01010000

cout <<io.bit.bit0<<endl;
cout <<io.bit.bit1<<endl;
cout <<io.bit.bit2<<endl;
cout <<io.bit.bit3<<endl;
cout <<io.bit.bit4<<endl;
cout <<io.bit.bit5<<endl;
cout <<io.bit.bit6<<endl;
cout <<io.bit.bit7<<endl;
}

//

输出为:
0
0
0
0
1
0
1
0
yuanlaosi 2011-07-09
  • 打赏
  • 举报
回复
你们的办法很好!
SolarJupiter 2011-07-09
  • 打赏
  • 举报
回复
一个菜鸟的建议:
你试一下 用逻辑与 比如 看第七位 x=i&1>>7 然后以八进制输出 x,换成二进制 就知道第七位是 1 还是0。 貌似比较麻烦~
demobin 2011-07-09
  • 打赏
  • 举报
回复
你访问bit.bit0就是访问第一位了。但是不可以给bit.bit0赋值超过1的值,不然bit1会受影响。understand
bdmh 2011-07-09
  • 打赏
  • 举报
回复
为每一个字节赋值,自己检查

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧