C语言一段位运算代码不是很理解

wux_labs 2023-01-28 15:48:24

以下表达式对a做了什么操作?

(((unsigned long)(a) + sizeof(long) * 8 - 1) / 8) & ( ~ (sizeof(long) - 1));

代码解释:
(unsigned long)(a):将a转换成无符号long类型
sizeof(long):取long类型数据所占用的字节数,sizeof(long) = 8
&:位运算符,按位与, 1 & 1 = 1,0 & 1 = 0,0 & 0 = 0
~:位运算符,按位取反,~1 = 0,~0=1,~ (sizeof(long) - 1) = ~7 ,二进制表示是:~(00000111) = 11111000

最终结果是:
将a强制转换成无符号long型,加上63,再除以8,再和11111000做与运算。

...全文
304 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,766

社区成员

发帖
与我相关
我的任务
社区描述
姓什么?我姓大。 大什么?大数据。 有多大?lambda。 家族成员有哪些?Hadoop、Hive、Spark。 开发语言有什么?Java、Python、Scala。
大数据 个人社区
社区管理员
  • wux_labs
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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