繁体   English   中英

在二进制数中找到前导1

[英]Find leading 1s in the binary number

大家,

我是C语言的新手,我尝试了解字节,二进制数和其他对于初学者来说重要的工作。

我希望有人可以在这里将我推向正确的方向。

例如,我有一个32位数字11000000 10101000 00000101 0000000(3232236800)。 我还将此数字的每个部分分配给单独的变量,分别为a = 11000000(192),b = 10101000(168),c = 00000101(5)d = 0000000(0)。 我不确定我是否真的需要这个。

有什么方法可以找到数字中的最后1个并使用此位置来计算前1个数字?

谢谢你的帮助!

您可以通过以下公式确定第一个前导1的位位置:

floor(ln(number)/ln(2))

其中“ floor()”表示四舍五入。
为了计算连续的前导数字(如果我正确地回答了问题的第二部分),我只能想象一个循环。

注1:
该公式是“以2为底的对数”的数学公式。
log10()相同。 基本上,您可以使用任何对数(即以任何底数为单位)来适应不同的底数。

笔记2:
当然,该公式是否比从MSB向下循环搜索更有效,这是值得怀疑的。 可能有良好的FPU支持。 它可能不适用于8位值。 仔细检查,以防您加快优化速度。

抱歉,我不是C专家,但这是我想出的Python代码:

num_ones = 0
while integer > 0:
    if integer % 2 == 1:
        num_ones += 1
    else:
        num_ones = 0
    integer = integer >> 1

基本上,我通过对给定整数进行位移来计算连续1的数量。 零将重置计数器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM