位运算取模的问题

insulted 2008-10-16 03:52:54

unsigned int index = 0;
DWORD num = 4296;
/* Compute number of bytes mod 64 */
index = (unsigned int)((num >> 3) & 0x3F);


哪位高人能给解释一下,index表示的就是数字num所占字节数对64取模?谢谢!
...全文
288 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiffa 2008-10-16
  • 打赏
  • 举报
回复
注:上面的位指的是bit。
kiffa 2008-10-16
  • 打赏
  • 举报
回复
num是位数,num >> 3,即num/8,得 num 字节数。a & (n - 1) 等价于 a % n,是取模的典型做法。

而0x3F = 64 - 1 = 63,故(num >> 3) & 0x3F 意味着一个有num 位的数(或者说二进制流更合适),其字节数对64取模的结果。
帅得不敢出门 2008-10-16
  • 打赏
  • 举报
回复
4296 二进制为1000011001000
num >> 3 相当于num/8
此例为537 二进制为1000011001
537&0x3f就是取 num/8 结果的低就0到6位是 11001 十进制为25

index表示的就是数字num所占字节数对64取模 经验证是错误的

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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