2016-05-02 4 views
-6

Я попытался преобразовать 23 в двоичную и пришел с числом 100111 с помощью the following process:Почему 23 равно 10111 в двоичном формате?

1) 23 = 22 + 1 // find out the least significant bit 1 
2) 22/2 = 10 + 1 // next bit is 1 
3) 10/2 = 4 + 1 // next bit is 1 
4) 4/2 = 2 + 0 // next bit is 0 

Так я остался с 2 в десятичной системе, что в двоичной системе 10. Теперь я записывал номер:

10 плюс биты от операций 4, 3, 2, 1 дает мне 100111, однако, ответ 10111. Где моя ошибка?

+2

Это не похоже на вопрос программирования. –

+0

Последнее, что я проверил, '10/2 = 5' ... –

+7

Это действительно странный способ подсчета двоичных файлов ... – ndugger

ответ

1

Снабжен this method, двоичное представление десятичного числа 23 является следующим образом:

ex: Convert 23 to a binary representation 

23/2 = 11 R 1 
11/2 = 5 R 1 
5/2 = 2 R 1 
2/2 = 1 R 0 
1/2 = 0 R 1 

answer = 10111 

Как вы в настоящее время есть,

1) 23 = 22 + 1 // найти наименее значимый бит 1

Этот шаг не требуется. Сначала вам не нужно сбривать нечетное число. Просто выполните процедуру, описанную в ссылке, чтобы сгенерировать вывод. Это означает, что единственная операция, которую вы выполняете на выходе десятичного числа, - это повторные деления на 2, при этом остатки описывают ваше двоичное представление вашего номера.

Если это не вопрос программирования, его следует перенести на правильный форум.

Если вы хотите решение JavaScript, как хорошо, так как вы отметили этот вопрос с тегом JavaScript, то самый простой способ это просто сделать (N).toString(2), где (N) ваш десятичное число и .toString(2) преобразует число в двоичном представлении вашего номера в строковой форме. 2 представляет основание/основание.

+0

спасибо, но _Этот не правильный._ правильно), потому что я просто представляю здесь 23 как '(x (n) * 2^n + ... + x (1) * 2^(1)) + 1 * 2^0', где часть '(x (n) * 2^n + ... + x (1) * 2^(1))' представляет 22. Тогда я делю это часть на 2, чтобы получить другой коэффициент вблизи 2^0. –

+0

Это прекрасно, но вы должны понимать, что сбритый «1» должен быть включен в окончательный результат. Следуя примеру в ссылке, это означает '10110' +' 00001', что соответствует '10111'. – timolawl

+0

См. Мой [этот ответ] (http://math.stackexchange.com/a/1769870/333066) на вопрос –

1

В конце концов, что вы хотите, чтобы получить это

23 = 16 + 4 + 2 + 1 
    = 1*16 + 0*8 + 1*4 + 1*2 + 1*1 
    = 1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 1*2^0 

Расчеты должны выглядеть следующим образом:

23 = 2*11 + 1 (1st least significant digit is 1) 
11 = 2*5 + 1 (2nd least significant digit is 1) 
5 = 2*2 + 1 (3rd least significant digit is 1) 
2 = 2*1 + 0 (4th least significant digit is 0) 
1 = 2*0 + 1 (5th least significant digit is 1) 
+0

thansk, я использую этот алгоритм, объясненный здесь (http://math.stackexchange.com/a/86211/333066). Не могли бы вы рассказать, как ваши расчеты соответствуют этому алгоритму? –

+0

Основная идея того, что я делаю, состоит в том, что представление base-b 'N' равно представлению base-b' N/b', за которым следует последняя цифра, которая представляет собой 'N% b' – hugomg

+0

спасибо, на основе моего [этого] (http://math.stackexchange.com/a/1769870/333066) исследования пятого шага не нужно, так как мы можем взять два бита '1' и' 0' из этого выражения '2 * 1 + 0'. –

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