【发布时间】:2013-01-30 06:37:26
【问题描述】:
static inline void ext4_ext_store_pblock(struct ext4_extent *ex,
ext4_fsblk_t pb)
{
ex->ee_start_lo = cpu_to_le32((unsigned long) (pb & 0xffffffff));
ex->ee_start_hi = cpu_to_le16((unsigned long) ((pb >> 31) >> 1) &
0xffff);
}
此代码来自 linux 内核。 见最后一行。它确实 pb>>31 然后 >>1 这和pb一样吗>> 32 为什么不这样做呢?
谢谢
编辑: 谢谢你们。将补丁发送到 ext4 邮件列表
【问题讨论】:
-
pb是什么数据类型? IOW,ext4_fsblk_t是什么? -
typedef unsigned long long ext4_fsblk_t;
-
pb保证至少为 64 位。因此,移动 32 位将不会调用未定义的行为。如果有的话,我不得不猜测编写该代码的人可能有点偏执,并且不确定标准的细节。 -
@Mysticial 或者,也许,部分代码曾经是 32 位的。
-
@AndersLind 如果讨论在邮件列表中弹出,如果你也在这里带来更新会很好。我刚刚在存档中找到了您的帖子,供有兴趣自己查找的人使用:news.gmane.org/…
标签: c