[英]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.