大家
我是 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 - 查找二进制数中的前导 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46616712/