Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.07.2012, 14:54
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

Практика: перевод десятичных чисел в двоичные и наоборот
Нужно создать 2 функции (метода), одна будет переводить десятичные числа в двоичные, а вторая наоборот, двоичные в десятичные. Приветствуются все варианты, самые минимизированные, самые быстрые и оригинальные.

P.S. мой вариант где-то ниже.
Ответить с цитированием
  #2 (permalink)  
Старый 22.07.2012, 15:03
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

alert( (20).toString(2) ); // 10100
alert( parseInt( "10100", 2 ) ); // 20
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 22.07.2012, 15:21
Аватар для Magneto
Люмус, Емаксос Developer!
Отправить личное сообщение для Magneto Посмотреть профиль Найти все сообщения от Magneto
 
Регистрация: 06.05.2010
Сообщений: 677

круто, кому то нужно повторить основы.
Ответить с цитированием
  #4 (permalink)  
Старый 22.07.2012, 15:35
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ну если так нужны функции то вот:
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' ) );
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 24.07.2012 в 15:21. Причина: исправил ошибку что нашел 9xakep
Ответить с цитированием
  #5 (permalink)  
Старый 24.07.2012, 14:36
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

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' ) );
__________________
оляля, ололо

Последний раз редактировалось 9xakep, 24.07.2012 в 15:02.
Ответить с цитированием
  #6 (permalink)  
Старый 24.07.2012, 15:03
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Хех, разобрал алгоритм на бумажке, ошибка заключалась в этом:
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
__________________
оляля, ололо
Ответить с цитированием
  #7 (permalink)  
Старый 24.07.2012, 15:19
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от 9xakep
Хех, разобрал алгоритм на бумажке, ошибка заключалась в этом:
ну яж и не тестил, написал так по быстрому особо не обдумывая.. Понятно дело без ошибок быстро не напишешь. Суть то ясна, да и код наипростейший. Для этих целей.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 24.07.2012, 20:16
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

devote,
Кому как, до мне бы эта строка вряд ли бы в голову пришла:

out = ( num & bit ? 1 : 0 ) + out;
__________________
оляля, ололо
Ответить с цитированием
  #9 (permalink)  
Старый 24.07.2012, 20:21
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от 9xakep
Кому как, до мне бы эта строка вряд ли бы в голову пришла:
ну а что тут неясного, обычная проверка присутствия бита, бит есть ставим 1, бита нету ставим ноль... В таких языках как Си, и подобных это обычное дело. Там часто с битами работать приходится. Особенно ассемблер
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #10 (permalink)  
Старый 24.07.2012, 20:40
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

devote,
Аа...чувак, точно, это ж элементарно, ты просто по сути считываешь само число по разрядно (вначале последний бит с 0001, потом предпоследний с 0010)
__________________
оляля, ололо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск