2017-10-07 78 views
0

大家,查找領先1秒的二進制數

我用C新我試着去理解與字節的二進制數,併爲初學者另一個重要的工作。

我希望有人能把我推向正確的方向。

例如,我有一個32位數字11000000 10101000 00000101 0000000(3232236800)。 我還將這個數字的每個部分分配爲a = 11000000(192),b = 10101000(168),c = 00000101(5)d = 0000000(0)。我不確定我是否真的需要這個。

有什麼方法可以找到數字中的最後1位,並使用此位置來計算前導1的數量?

謝謝你的幫忙!

+1

查找'10101000'中的最後一個1並不能告訴你有多少其他的1(有多少*可以*)。無論如何,對於初學者來說,這是非常不重要的。 –

回答

1

可以通過這個公式確定所述第一前導1的bitposition:

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

其中 「floor()」 是指下舍入。
爲了計算連續的前導數(如果我正確地得到了問題的第二部分),我只能想象一個循環。

注1:
的公式爲「2的基礎上數的對數」的數學公式。
log10()相同。基本上你可以使用任何對數(即任何基數)來適應不同的基數。

注2:
這個公式是否比從MSB向下循環搜索更有效率當然是有問題的。它可能具有良好的FPU支持。它可能不適用於8位值。仔細檢查你是否正在加速優化。

+0

你能告訴我你是如何到達這個公式的? –

+0

@J ... S感謝您的評論,我因此改進了答案。 – Yunnosch