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

时间:2015-10-01 21:59:50

标签: binary logarithm

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

3 个答案:

答案 0 :(得分:5)

如果您想使用对数,可以

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

重复以下步骤:

  • n 定义为log 2 (b)的整数部分。 b 的二进制表示中的 n th 位置有1

  • 设置 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。

我们知道二元表示在{sup> 11 ,2 9 ,2 8 ,2 1 s > 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

所以2835的二进制表示是101100010011

答案 1 :(得分:0)

是的,你必须循环0 - >比你需要的更大的力量,然后拿下余数并做同样的事情,这也很痛苦。

我建议你尝试一种叫做“分而治之”的分裂的递归方法。

http://web.stanford.edu/class/archive/cs/cs161/cs161.1138/lectures/05/Small05.pdf

但是,再次,因为你需要一个二进制表示,我想除非你使用ready utils,除法是最简单的恕我直言。

答案 2 :(得分:0)

从CS的角度来看,二进制文件非常简单,因为你通常只需要达到255.或者如果使用HEX符号则需要15。你使用的越多,它就越容易。

我如何在运行中,通过记住所有2个功能,最多128个并包括1.(存在1代替1.4xxx可能意味着您不能使用日志)。

128,64,32,16,8,4,2,1

然后我使用规则,如果数字大于每个幂,则按降序排列,这是一个' 1'并减去它,否则它是' 0'。

所以163

163 >= 128 = '1' R 35
35  !>= 64 = '0'
35  >= 32  = '1' R 3
3   !>= 16 = '0'
3   !>= 8  = '0'
3   !>= 4  = '0'
3   >=  2  = '1' R 1
1   >=  1  = '1' R 0

163 = 10100011.

这可能不是最优雅的方法,但是当你只是需要转换一些特别的想法时,比较和减法可能比分割更容易。