2015-10-01 6 views
2

Я новичок в CS, и я нахожу способ деления на поиск двоичного числа, чтобы быть болью. Можно ли использовать журнал для быстрого поиска 24, например, в двоичном формате?Можно ли использовать логарифмы для преобразования чисел в двоичные?

+0

Логарифмы применяются к числам - база, в которой они записаны, не имеет значения (например, 'log (1111b)' = 'log (15)' = 'log (0xF)'). Подумайте, как можно преобразовать произвольное число в десятичное. –

ответ

0

Да, вам нужно пройти через 0 -> мощность, которая больше, чем вам нужно, а затем взять остаток и сделать то же самое, что тоже больно.

Я предлагаю вам попробовать рекурсию под названием «Разделить и покорить».

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

Но опять-таки, так как вам нужно бинарное представление, я думаю, если вы не используете готовые утилиты, подход деление является простейшим ИМХО.

0

С точки зрения CS, двоичный код довольно прост, потому что вам обычно нужно только подняться до 255. Или 15, если использовать нотацию HEX. Чем больше вы его используете, тем легче.

Как я это делаю «на лету», помня все 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. 

Это может быть не самый изящный способ, но когда вам просто нужно преобразовать что-то одноранговую думать об этом, как сравнение и вычитание может быть проще, чем деление.

5

Если вы хотите использовать логарифмы, вы можете может.


Определить войти (б) в журнале (б )/журнал (2) или п (б )/п (2) (они одинаковы).

Повторите следующие действия:

  • Определить п в качестве целой части бревна (б). Существует 1 в nth позиция в двоичном представлении b.

  • Набор б = б - 2 п

  • Повторите первый шаг до б = 0.


Практический пример: Преобразование 2835 в двоичный

  • журнал (2835) = 11,47 .. =>п = 11

    Двоичный представление имеет 1 в позиции 2 .

  • 2835 - (2 = 2048) = 787

    журнал (787) = 9,62 ... =>п = 9

    Двоичное представление имеет 1 в позиции 2 .

  • 787 - (2 = 512) = 275

    журнал (275) = 8,10 ... =>п = 8

    Двоичное представление имеет 1 в позиции 2 .

  • 275 - (2 = 256) = 19

    журнал (19) = 4,25 ... =>п = 4

    Двоичное представление имеет 1 в позиции 2 .

  • 19 - (2 = 16) = 3

    журнал (3) = 1,58 .. =>п = 1

    Двоичное представление имеет 1 в 2 позиция.

  • 3 - (2 = 2) = 1

    журнал (1) = 0 =>п = 0

    Двоичное представление имеет 1 в 2 позиция.

Мы знаем, двоичное представление имеет 1 с в 2 , 2 , 2 , 2 , 2 и 2 позиции:

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.

+0

Я перечитал ваш вопрос и увидел, что вам нужно 24 в двоичном формате. Используя тот же принцип, вы получите 2^4 и 2^3, давая вам 24 = '11000b'. –

+0

Я начал думать об этом сегодня как более быстрый способ конвертировать в двоичный файл. Нашел ваш ответ очень полезным. Рад видеть, что я на правильном пути. – richbai90

Смежные вопросы