linux0.11源码剖析,linux-0.11调试教程,df.c源代码分析 [原创自sitelist]

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

int nibblemap[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 };

1101,1100

3个1,2个1

如tmp=1101,1100b

nibblemap[tmp&0xf] + nibblemap[(tmp>>4)&0xf]=5

上面的可以算出1个字节有多少个1!

ino_t count(unsigned numblocks, unsigned numbits)

{ unsigned i, j, end, sum = 0;

char buf;

for (i=0; (i

{

if (read(fd,buf,sizeof(buf))<0)

return(0);

if (numbits >= (8*BLOCK_SIZE))

{

end = BLOCK_SIZE;

numbits -= 8*BLOCK_SIZE;

}

else

{ int tmp;

end = numbits >> 3; //除8,1个字节8位

numbits &= 0x7; //取余,比如是100b既4个i节点,既最后一个字节的低4位

tmp = buf[end] & ((1<

sum += nibblemap[tmp&0xf] + nibblemap[(tmp>>4)&0xf];//算最后一个字节多个个1!!!

numbits = 0;

}

//算其他字节(除去最后一个字节buf[end])有多少个1

//如numbits大于8092则算buf[0]-buf[1023]共1024个字节8092个位中有几个1

for (j=0; j

sum += nibblemap & 0xf] + nibblemap[(buf[j]>>4)&0xf];

}

return(sum);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值