c - 查找二进制数中的前导 1

标签 c binary byte

大家

我是 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/

相关文章:

c - 优化数组转置功能

c++ - 如何解决 YACC 中的 Shift/Reduce 冲突

c++ - Qt Creator 不能使用 const char*

java - 在 Java 中将大型二进制字符串转换为十进制

memory - 可寻址和可移动的最小存储单元

python - 整数到字节而不在python中使用struct

java - 从字符到字节的转换

c - 查找客户端使用的端口号

javascript - 通过AJAX上传的二进制数据保存在PHP服务器上

字符比较和处理变量