【位操作】——获取整数变量最低位为 1 的位置

这篇具有很好参考价值的文章主要介绍了【位操作】——获取整数变量最低位为 1 的位置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

获取整数变量最低位为 1 的位置

#define BIT_LOW_BIT(y)      (((y)&BIT(0)) ? 0 : (((y)&BIT(1)) ? 1 : (((y)&BIT(2)) ? 2 : (((y)&BIT(3)) ? 3 :             \
                            (((y)&BIT(4)) ? 4 : (((y)&BIT(5)) ? 5 : (((y)&BIT(6)) ? 6 : (((y)&BIT(7)) ? 7 :             \
                            (((y)&BIT(8)) ? 8 : (((y)&BIT(9)) ? 9 : (((y)&BIT(10)) ? 10 : (((y)&BIT(11)) ? 11 :         \
                            (((y)&BIT(12)) ? 12 : (((y)&BIT(13)) ? 13 : (((y)&BIT(14)) ? 14 : (((y)&BIT(15)) ? 15 :     \
                            (((y)&BIT(16)) ? 16 : (((y)&BIT(17)) ? 17 : (((y)&BIT(18)) ? 18 : (((y)&BIT(19)) ? 19 :     \
                            (((y)&BIT(20)) ? 20 : (((y)&BIT(21)) ? 21 : (((y)&BIT(22)) ? 22 : (((y)&BIT(23)) ? 23 :     \
                            (((y)&BIT(24)) ? 24 : (((y)&BIT(25)) ? 25 : (((y)&BIT(26)) ? 26 : (((y)&BIT(27)) ? 27 :     \
                            (((y)&BIT(28)) ? 28 : (((y)&BIT(29)) ? 29 : (((y)&BIT(30)) ? 30 : (((y)&BIT(31)) ? 31 : 32  \
                            ))))))))))))))))))))))))))))))))

这个宏通过对变量 y 进行一系列的位与运算和三元运算符嵌套,来判断最低位的位置。它从最低位开始,依次检查每一位是否为 1,如果是 1,则返回相应的位置;如果不是,则进入下一位的判断,直到找到最低位的位置。如果所有位都为 0,则返回 32。

#include <stdio.h>
#define BIT(n) (1 << (n))
#define BIT_LOW_BIT(y)      (((y)&BIT(0)) ? 0 : (((y)&BIT(1)) ? 1 : (((y)&BIT(2)) ? 2 : (((y)&BIT(3)) ? 3 :             \
                            (((y)&BIT(4)) ? 4 : (((y)&BIT(5)) ? 5 : (((y)&BIT(6)) ? 6 : (((y)&BIT(7)) ? 7 :             \
                            (((y)&BIT(8)) ? 8 : (((y)&BIT(9)) ? 9 : (((y)&BIT(10)) ? 10 : (((y)&BIT(11)) ? 11 :         \
                            (((y)&BIT(12)) ? 12 : (((y)&BIT(13)) ? 13 : (((y)&BIT(14)) ? 14 : (((y)&BIT(15)) ? 15 :     \
                            (((y)&BIT(16)) ? 16 : (((y)&BIT(17)) ? 17 : (((y)&BIT(18)) ? 18 : (((y)&BIT(19)) ? 19 :     \
                            (((y)&BIT(20)) ? 20 : (((y)&BIT(21)) ? 21 : (((y)&BIT(22)) ? 22 : (((y)&BIT(23)) ? 23 :     \
                            (((y)&BIT(24)) ? 24 : (((y)&BIT(25)) ? 25 : (((y)&BIT(26)) ? 26 : (((y)&BIT(27)) ? 27 :     \
                            (((y)&BIT(28)) ? 28 : (((y)&BIT(29)) ? 29 : (((y)&BIT(30)) ? 30 : (((y)&BIT(31)) ? 31 : 32  \
                            ))))))))))))))))))))))))))))))))
 int main()
 {
    int num = 10; /* 二进制表示:00000000000000000000000000001010 */
    int lowBit = BIT_LOW_BIT(num);
    printf("最低位的位置:%d\n", lowBit);
    return 0;
}

打印输出文章来源地址https://www.toymoban.com/news/detail-616508.html

最低位的位置:1

到了这里,关于【位操作】——获取整数变量最低位为 1 的位置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包