22.07.2012, 14:54
|
|
Люмус, Емаксос Developer!
|
|
Регистрация: 06.05.2010
Сообщений: 677
|
|
Практика: перевод десятичных чисел в двоичные и наоборот
Нужно создать 2 функции (метода), одна будет переводить десятичные числа в двоичные, а вторая наоборот, двоичные в десятичные. Приветствуются все варианты, самые минимизированные, самые быстрые и оригинальные.
P.S. мой вариант где-то ниже.
|
|
22.07.2012, 15:03
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
alert( (20).toString(2) ); // 10100
alert( parseInt( "10100", 2 ) ); // 20
|
|
22.07.2012, 15:21
|
|
Люмус, Емаксос Developer!
|
|
Регистрация: 06.05.2010
Сообщений: 677
|
|
круто, кому то нужно повторить основы.
|
|
22.07.2012, 15:35
|
что-то знаю
|
|
Регистрация: 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' ) );
Последний раз редактировалось devote, 24.07.2012 в 15:21.
Причина: исправил ошибку что нашел 9xakep
|
|
24.07.2012, 14:36
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 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.
|
|
24.07.2012, 15:03
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 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
__________________
оляля, ололо
|
|
24.07.2012, 15:19
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от 9xakep
|
Хех, разобрал алгоритм на бумажке, ошибка заключалась в этом:
|
ну яж и не тестил, написал так по быстрому особо не обдумывая.. Понятно дело без ошибок быстро не напишешь. Суть то ясна, да и код наипростейший. Для этих целей.
|
|
24.07.2012, 20:16
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
devote,
Кому как, до мне бы эта строка вряд ли бы в голову пришла:
out = ( num & bit ? 1 : 0 ) + out;
__________________
оляля, ололо
|
|
24.07.2012, 20:21
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от 9xakep
|
Кому как, до мне бы эта строка вряд ли бы в голову пришла:
|
ну а что тут неясного, обычная проверка присутствия бита, бит есть ставим 1, бита нету ставим ноль... В таких языках как Си, и подобных это обычное дело. Там часто с битами работать приходится. Особенно ассемблер
|
|
24.07.2012, 20:40
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
devote,
Аа...чувак, точно, это ж элементарно, ты просто по сути считываешь само число по разрядно (вначале последний бит с 0001, потом предпоследний с 0010)
__________________
оляля, ололо
|
|
|
|