【位操作】——获取整数变量最低位为 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模板网!

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

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

相关文章

  • C语言指针操作(二)指针变量作为函数参数

    指针变量作为函数参数详解,形参和实参之间的值传递如何传递?如何改变指针变量所指向的变量? 函数的参数不仅可以是整型,浮点型,字符型等数据,还可以是指针类型;它的作用是将一个变量的地址传送到另一个函数中。 关于地址,指针,指针变量可以参考一下这篇

    2024年02月04日
    浏览(50)
  • R语言【paleobioDB】——pbdb_collections_geo():从PBDB获取根据地理位置信息筛选的采集号的基本信息

    Package  paleobioDB  version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 参数【...】 :可通过 API 调用的参数。所有可用参数详见 PBDB Data Service: Single fossil collection。 根据参数发

    2024年01月22日
    浏览(35)
  • Go语言变量使用指南:声明、类型转换与字符串操作

    深入了解Go语言中变量的声明方式、字符和布尔类型的细节、字符串的不可变性以及基本数据类型之间的转换规则。

    2024年02月10日
    浏览(90)
  • 初始Go语言2【标识符与关键字,操作符与表达式,变量、常量、字面量,变量作用域,注释与godoc】

      go变量、常量、自定义类型、包、函数的命名方式必须遵循以下规则: 首字符可以是任意Unicode字符或下划线。 首字符之外的部分可以是Unicode字符、下划线或数字。 名字的长度无限制。 理论上名字里可以有汉字,甚至可以全是汉字,但实际中不要这么做。 Go语言

    2023年04月09日
    浏览(55)
  • 混合整数线性规划——选址问题(决策变量0-1问题)MATLAB

    问题: 某快餐连锁经营公司有7个地点(A1,A2,…,A7)可以设立快餐 店,由于地理位置因素,设立快餐店时必须满足以下要求: A1,A2,A3三个地点最多 可选两个,A4和A5至少选取一个,A6和A7至少选取一个 。已知各个地点设立快餐店 的投入和预计收益如表所示。   已知目前

    2024年02月13日
    浏览(40)
  • JS判断输入值是否为正整数,判断变量是否为数字

    这篇文章将讨论如何确定一个变量是否代表 JavaScript 中的有效数字。 1.JS中的test是原来是JS中检测字符串中是否存在的一种模式,JS输入值是否为判断正整数代码: 扩展: 附判断数字、浮点的正则表达:  ”^\\\\d+$” //非负整数(正整数 + 0) “^[0-9]*[1-9][0-9]*$” //正整数 “^(

    2024年02月06日
    浏览(80)
  • Shell编程基础(三)环境变量 & 位置变量 & 系统内置变量

    在脚本种直接定义的变量,只能在当前shell进程中使用 若想要在其他shell进程中使用,可以将变量声明为 环境变量 export 变量名 :用于导出已有变量到环境变量 export 变量名=变量值:直接声明一个新的变量为环境变量 注意:命令行 执行 export 声明的环境变量,只在当前shell

    2024年02月15日
    浏览(41)
  • 汉明距离,两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。

    题记: 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 示例 1: 输入 :x = 1, y = 4 输出 :2 解释 : 1 (0 0 0 1) 4 (0 1 0 0) ------↑— ↑ 上面的箭头指出了对应二进制位不同的位置。 示例 2:

    2024年02月15日
    浏览(47)
  • C语言:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。

    题目:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。  刚学C语言时我们能运用的一些方法其实很有限 所以今天我用新人基础的方法解决这道题目 这一题对于新手来说还是很容易有思路的 然而也会出现一些卡顿的地方 比如思考

    2024年02月05日
    浏览(55)
  • STM32定义变量到指定内存位置

    rt thread , 怎么定义变量到指定内存位置? OpenCat是由未来可编程机器人宠物制造商Petoi开发的基于Arduino和Raspberry Pi的开源四足机器人宠物框架。 定义一个宏 使用 修改链接文件 定义一个宏 使用

    2024年02月12日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包