您的位置:首页 > 其它

GENMASK_ULL 和GENMASK,产生high和low之间全是1的值

2017-06-19 11:31 771 查看
GENMASK_ULL(39, 21) 这行执行后的值等于0x000000ffffe00000,简单说就是将39和21 之间的bit置为1.对应的GENMASK 是产生32 bit的mask

源码如下:

#define GENMASK(h, l) \

    (((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h))))

#define GENMASK_ULL(h, l) \
    (((~0ULL) << (l)) & (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))

与之对应的是可以通过下面两个宏,来移位

#define BIT(nr)            (1UL << (nr))

#define BIT_ULL(nr)        (1ULL << (nr))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐