16进制数与运算为什么执行不了?程序如下: 还请高手帮看看,程序不执行 if ((a[2] & 0x80)==1)

tqwtshh 2011-08-11 05:13:54
int main()
{
unsigned char Page0Font5x7[2][8]={{0x00,0x00,0xFA,0xed,0x00,0x00,0x00,0x00},{0x00,0xE0,0x00,0xE0,0x00,0x00,0x00,0x00}};
unsigned char a[8];
unsigned char b[8];
int i;
for(i=0;i<8;i++)
{
a[i]=Page0Font5x7[0][i]; //将原有数组的第一行存入数组a[]中;
}
if ((a[2] & 0x80)==1)
{
b[0]=1;
}
else b[0]=0;
if ((a[2] & 0x40)==1)
{
b[1]=1;
}
else b[1]=0;

for (i=0;i<8;i++)
{
printf("%02x",a[i]);
printf("\t");
}
printf("\n");
printf("b[0]=%d",b[0]);
printf("\t");
printf("%d",b[1]);
printf("\n");
return 0;
}
程序总是不进入if ((a[2] & 0x80)==1)语句,这是为什么啊?
...全文
301 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯大侠爱喝水 2011-08-12
  • 打赏
  • 举报
回复
1111 1010&1000 0000 这结果是1000 0000= 0x80
AnYidan 2011-08-12
  • 打赏
  • 举报
回复
lz 应该是没用明白“按位运算”和“逻辑运算”; & 和 &&
wyfwx 2011-08-12
  • 打赏
  • 举报
回复
if ((a[2] & 0x80))
wyfwx 2011-08-12
  • 打赏
  • 举报
回复
if ((a[2] & 0x80)== 0x80
icemornings 2011-08-11
  • 打赏
  • 举报
回复
第二个打错了,是
a[2] & 0x40 = 0x40,不等于1
[Quote=引用 1 楼 icemornings 的回复:]

C/C++ code

unsigned char Page0Font5x7[2][8] = {{0x00, 0x00, 0xFA, 0xed, 0x00, 0x00, 0x00, 0x00}, {0x00, 0xE0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00}};
unsigned char a[8];
unsigned char b[8……
[/Quote]
shen8686 2011-08-11
  • 打赏
  • 举报
回复
unsigned char Page0Font5x7[2][8]={{0x00,0x00,0xFA,0xed,0x00,0x00,0x00,0x00},{0x00,0xE0,0x00,0xE0,0x00,0x00,0x00,0x00}};
直接zeromemory初始化

还有if ((a[2] & 0x80)==1)
这个条件不会满足,因为0x80的末尾是0,与计算不可能算出1来
icemornings 2011-08-11
  • 打赏
  • 举报
回复

unsigned char Page0Font5x7[2][8] = {{0x00, 0x00, 0xFA, 0xed, 0x00, 0x00, 0x00, 0x00}, {0x00, 0xE0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00}};
unsigned char a[8];
unsigned char b[8];
int i;

for(i = 0; i < 8; i++)
{
a[i] = Page0Font5x7[0][i]; //将原有数组的第一行存入数组a[]中;
}

if((a[2] & 0x80) == 1) /* a[2] = 0xFA,则a[2] & 0x80 = 0x80,不等于1 */
{
b[0] = 1;
}
else b[0] = 0;

if((a[2] & 0x40) == 1) /* 同上,a[2] & 0x80 = 0x40,不等于1 */
{
b[1] = 1;
}
else b[1] = 0;

for(i = 0; i < 8; i++)
{
printf("%02x", a[i]);
printf("\t");
}
printf("\n");
printf("b[0]=%d", b[0]);
printf("\t");
printf("%d", b[1]);
printf("\n");

return 0;

69,374

社区成员

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

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