位视图排序 位操作

hahahappy1986 2008-12-16 10:46:45
小弟对于set clear test函数中各变量值的变化不太了解请明白人帮助解释下 谢谢
还有MASK的作用
#include<STDIO.H>

#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 1000
int a[1+N];

void set(int i)
{ a[i>>SHIFT] |= (1<<(i & MASK)); }
void clear(int i)
{ a[i>>SHIFT] &= ~(1<<(i & MASK)); }
int test(int i)
{ return a[i>>SHIFT] & (1<<(i & MASK)); }

int main (void)
{
int i;
for(i=0;i<N;i++)
clear(i);
while(scanf("%d",&i) != EOF)
set(i);
for(i=0;i<N;i++)
if(test(i))
printf("%d\n",i);

return 0;
}
...全文
57 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
非完美主义者 2008-12-16
  • 打赏
  • 举报
回复
MASK使 i&MASk 最多等于0x1f。
当0<i<=31时,set函数将a[0]的第i+1位置为1.
当32<i<=63时,set函数将a[1]的第i-31位置为1. 以此类推。

clear函数跟set函数做相反的事情。

test函数判断a[x]的某一位是否被置为1了。

69,371

社区成员

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

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