Практика: перевод десятичных чисел в двоичные и наоборот
Нужно создать 2 функции (метода), одна будет переводить десятичные числа в двоичные, а вторая наоборот, двоичные в десятичные. Приветствуются все варианты, самые минимизированные, самые быстрые и оригинальные.
P.S. мой вариант где-то ниже. |
alert( (20).toString(2) ); // 10100 alert( parseInt( "10100", 2 ) ); // 20 |
круто, кому то нужно повторить основы.
|
ну если так нужны функции то вот:
function toBIN( num ) { var out = "", bit = 1; while( num >= bit ) { out = ( num & bit ? 1 : 0 ) + out; bit <<= 1; } return out || "0"; } alert( toBIN(20) ); function toDEC( dec ) { var out = 0, len = dec.length, bit = 1; while( len-- ) { out += dec[ len ] == "1" ? bit : 0; bit <<= 1; } return out; } alert( toDEC( '10100' ) ); |
devote,
function toBIN( num ) { var out = "", bit = 1; while( num > bit ) { out = ( num & bit ? 1 : 0 ) + out; bit <<= 1; } return out || "0"; } *!* alert( toBIN(4) ); */!* function toDEC( dec ) { var out = 0, len = dec.length, bit = 1; while( len-- ) { out += dec[ len ] == "1" ? bit : 0; bit <<= 1; } return out; } alert( toDEC( '0100' ) ); |
Хех, разобрал алгоритм на бумажке, ошибка заключалась в этом:
function toBIN( num ) { var out = "", bit = 1; *!* while( num >= bit ) { // >= */!* out = ( num & bit ? 1 : 0 ) + out; bit <<= 1; } return out || "0"; } alert( toBIN(4) ); function toDEC( dec ) { var out = 0, len = dec.length, bit = 1; while( len-- ) { out += dec[ len ] == "1" ? bit : 0; bit <<= 1; } return out; } alert( toDEC( '0100' ) ); Когда bit == 4, условие не выполнялось, и выводило тот результат, который был уже, а это: 00 |
Цитата:
|
devote,
Кому как, до мне бы эта строка вряд ли бы в голову пришла: out = ( num & bit ? 1 : 0 ) + out; |
Цитата:
|
devote,
Аа...чувак, точно, это ж элементарно, ты просто по сути считываешь само число по разрядно (вначале последний бит с 0001, потом предпоследний с 0010) |
Часовой пояс GMT +3, время: 11:24. |