首页 / 知识
在C中找到最高位
2023-04-14 18:34:00

Find the highest order bit in C我追求的是可以输入数字的东西,它将返回最高位。我敢肯定有一个简单的方法。下面是示例输出(左边是输入)
摘自Hacker's Delight:
此版本适用于32位整数,但逻辑可以扩展到64位或更高版本。
这应该可以解决问题。
hob(1234)返回1024 像混淆代码?试试这个: 1 <<(int)log2(x) 这次聚会有点晚了,但是鉴于现代的GCC作为编译器,我发现的最简单的解决方案很简单:
它甚至是相对便携式的(至少它可以在任何GCC平台上运行)。 Linux内核具有许多这样的便捷位,它们以最有效的方式对许多体系结构进行了编码。您可以在include / asm-generic / bitops / fls.h(和朋友)中找到通用版本,但如果速度至关重要,并且可移植性非常好,请参见include / asm-x86 / bitops.h中使用内联汇编的定义。不。 不断想起低阶位...
这可以通过现有的库调用轻松解决。
Linux手册页提供了有关此功能及其与其他输入类型对应的功能的更多详细信息。 执行此操作的快速方法是通过查找表。对于32位输入和8位查找表,仅需要进行4次迭代:
如果不需要便携式解决方案并且代码在x86兼容CPU上执行,则可以使用Microsoft Visual C / C编译器提供的_BitScanReverse()固有函数。它映射到BSR CPU指令,该指令返回最高位。
我非常喜欢的最佳算法是:
它很容易扩展为uint64_t,如下所示:
甚至是__int128
此外,跨平台解决方案独立于使用编译器 我想到的一个不错的解决方案是对位进行二进制搜索。
最大位是2的最高幂,因此对于64位数字,它将是2 ^ 63。位移应初始化为位数的一半,因此对于64位,它将是32。 |
最新内容
相关内容
linux文件输入命令?
linux文件输入命令?,工作,系统,地址,信息,工具,位置,命令,设备,发行,首开,linux中使用vi指令后怎么输入?1、[Ctrl]+[f]:屏幕向下移动一页,相当于linux命令行不能输入?
linux命令行不能输入?,工作,系统,电脑,服务,命令,名字,首次,百度,管理,第一,linux中的命令如何输入linux常用命令:pwd命令该命令的英文解释为prlinux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你linux输出第二列命令?
linux输出第二列命令?,数据,信息,时间,软件,百度,单位,适当,系统,命令,文件,linux逐行获取csv数据1、需要导入到数据库中USER_INFO表,而且有5亿linux怎么输出命令?
linux怎么输出命令?,标准,信息,系统,状态,实时,时间,工具,分析,单位,数据,Linux中top命令输出指标详解TIME+ :任务启动后到现在所使用的全部CPUlinux命令行输出暂停?
linux命令行输出暂停?,暂停,服务,系统,管理,代码,环境,信息,数据,网络,跨行,Elasticsearch在Linux环境下的2种运行和停止方式开启和关闭ES服务linux快捷输入命令?
linux快捷输入命令?,系统,位置,命令,终端,名称,首页,分行,第一,快捷键,窗口,linux中的命令是在哪里输入的?可以在 Windows 上运行 Linux 命令linux输入命令的步骤?
linux输入命令的步骤?,系统,工作,命令,发行,第三,数字,时间,管理,首开,基础,linux中使用vi指令后怎么输入?[Ctrl]+[f]:屏幕向下移动一页,相当于[linux命令输入ip?
linux命令输入ip?,地址,系统,网络,代码,设备,密码,信息,电脑,数字,名称,linux怎么查看ip地址1、目录方法1:使用Ubantu(乌班图)界面右键点击通知区linux打命令输入密码?
linux打命令输入密码?,密码,系统,状态,代码,管理,标的,位置,地址,名称,命令,Linux用户命令行登录时输入密码,你看不见输入的状态,连点都不显示linux输入命令后乱码?
linux输入命令后乱码?,系统,乱码,中文,情况,环境,地方,名称,字符集,服务器,字符,linux中文显示乱码在命令行输入”dpkg-reconfigure locales”linux命令输出加时间?
linux命令输出加时间?,时间,系统,名称,设备,命令,信息,管理,标准,数字,百度,linux中,怎么通过shell语句获取当前日期,输出格式要求20111224._