C语言高手请赐教

FireBirdCN 2009-07-23 10:40:53
void char_hz(char ch,unsigned char *fbmem,unsigned int width,unsigned int height,unsigned int x1,unsigned int y1)
{
int i,j,k,n;
unsigned char list;
n = ch * 32;
for(i = 0;i < 16;i++,n++)
{
list = fontdata_16x16[n];
for(j=0;j<8;j++)
{
if(list&(1<<(7-j)))
{

fb_16pixel(fbmem,width,height,y1+j,x1+i, 0x1C3B);
}

}
n++;
list = fontdata_16x16[n];

for(j=0;j<8;j++)
{

if(list&(1<<(7-j)))
{
fb_16pixel(fbmem,width,height,y1+8+j,x1+i,0x1C3B);
}

}


}
}

这是一段显示字模的代码 红色表示部分 我不明白什么意思~~高手指点一下
fontdata_16x16 是一个char 数组
哪里讲的不清楚的 请提出我补充
...全文
67 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen8686 2009-07-23
  • 打赏
  • 举报
回复
1左移(7-j)位,只有1位为1其余都为0
list是一个字符转化成16进制数为8位,
两者相与,只有在同一位上都是1才为1否则为0
由于1左移(7-j)位只有1位为1
所以若list在该位上若为0则两者相与的结果为0 FALSE
否则为TRUE
FireBirdCN 2009-07-23
  • 打赏
  • 举报
回复

位运算符
逻辑运算符
搞晕了~~
谢谢二位
pengzhixi 2009-07-23
  • 打赏
  • 举报
回复
if(list&(1 < <(7-j)))
将1左移(7-j)位,然后和list这个unsigned char字符做与运算。判断list的第7-j位是否为0.如果不为0 就执行下面的语句
DarkChampion 2009-07-23
  • 打赏
  • 举报
回复
if(list&(1 <<(7-j)))

1 <<(7-j)是把1左移7-j位
如j=2,则为32

list & (1 <<(7-j)) list与上刚才的值
就是判断list第7-j位是否为1

69,336

社区成员

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

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