分享一种编程的思想,建议采用移位的形式进行判断。
如原始变量 INT32_Temp = 0xABCDEFAB;
要用第0位的话,取值等于 ((INT32_Temp >>0) & 0x0001) 右移,然后取最右边的一位
依次类推,如果取值第N位, ((INT32_Temp >>N) & 0x0001)
具体的代码请自行编写 :)
首先,C51并不原生支持位数组。
其次,用标准C的方式,效率会很低。51平台有位寻址方式。
另外,不明白你为什么要转换为word型,进一步降低了效率。
你不妨先描述一下要实现的目的。
#include
#define uchar unsigned char
typedef union l_32 //定义共用体
{
unsigned long int long_32;
struct b_32
{
uchar b00:1; //位域
uchar b01:1;
uchar b02:1;
uchar b03:1;
uchar b04:1;
uchar b05:1;
uchar b06:1;
uchar b07:1;
uchar b08:1;
uchar b09:1;
uchar b10:1;
uchar b11:1;
uchar b12:1;
uchar b13:1;
uchar b14:1;
uchar b15:1;
uchar b16:1;
uchar b17:1;
uchar b18:1;
uchar b19:1;
uchar b20:1;
uchar b21:1;
uchar b22:1;
uchar b23:1;
uchar b24:1;
uchar b25:1;
uchar b26:1;
uchar b27:1;
uchar b28:1;
uchar b29:1;
uchar b30:1;
uchar b31:1;
}bit_32;
}ulongs;
uchar word[32];
ulongs kk; //定义一个32位的变量
void main(void)
{
kk.long_32 = 0xABCDEFAB; //对32位赋值
word[0] = kk.bit_32.b00; //变量kk的最低位赋给数组第1个元素
word[1] = kk.bit_32.b01; //变量kk的第二位赋给数组第2个元素
//同理可以对任意一个数组元素赋值
}
望采纳
main(){
unsigned long hex=0xABCDEFAB
unsigned char word[32],i;
for (i=31;i>=0;i--)
{
word[i]=hex&0x1;
hex=hex>>1;
}
}