是否可以使用对数将数字转换为二进制?

Nic*_*ick 2 binary logarithm

我是CS的新生,我发现找到二进制数的划分方式很痛苦.是否可以使用log快速查找24,例如,二进制?

Wai*_*Lee 5

如果你想使用对数,你可以.


将log 2(b)定义为log(b)/ log(2)或ln(b)/ ln(2)(它们是相同的).

重复以下步骤:

  • n定义为log 2(b)的整数部分.在b的二进制表示1中存在第n 位置.

  • 设置b = b - 2 n

  • 重复第一步直到b = 0.


工作示例:将2835转换为二进制

  • log 2(2835)= 11.47 .. => n = 11

    二进制表示在2 11位置具有1 .

  • 2835 - (2 11 = 2048)= 787

    log 2(787)= 9.62 ... => n = 9

    二进制表示在2 9位置具有1 .

  • 787 - (2 9 = 512)= 275

    log 2(275)= 8.10 ... => n = 8

    二进制表示在2 8位置具有1 .

  • 275 - (2 8 = 256)= 19

    log 2(19)= 4.25 ... => n = 4

    二进制表示在2 4位置具有1 .

  • 19 - (2 4 = 16)= 3

    log 2(3)= 1.58 .. => n = 1

    二进制表示在2 1位置具有1.

  • 3 - (2 1 = 2)= 1

    log 2(1)= 0 => n = 0

    二进制表示在2 0位置具有1 .

我们知道的二进制表示具有1S IN的2 11,2 9,2 8,2 4,2 1,和2 0的位置:

2^     11 10 9 8 7 6 5 4 3 2 1 0
binary  1  0 1 1 0 0 0 1 0 0 1 1
Run Code Online (Sandbox Code Playgroud)

所以2835的二进制表示是101100010011.