Практика: перевод десятичных чисел в двоичные и наоборот
Нужно создать 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, время: 18:14. |