Как мне преобразовать строку в битовую маску в JavaScript? - PullRequest
1 голос
/ 18 июня 2010

Теперь это достаточно просто, когда числа маленькие, но числа типа "9223372036854775807" слишком велики для parseInt ().

Я не уверен, как это сделать в редакторе скриптов Google docs, который, похоже, не учитывает внешние классы.

1 Ответ

1 голос
/ 18 июня 2010

Вот, пожалуйста, где-то использовал этот скрипт, и он, кажется, работает.Идея заключается в том, что он разбивает строку на 8-символьные порции и вычисляет порцию / 2, затем суммирует порции и получает результат деления на 2.

Делив на 2 - он легко вычисляетзатем результат.

var maxIntSize = 8;

function divide2(number, addup, depth) {
    var result = "";

    var partLength = Math.min(number.length,maxIntSize); 
    var part = number.substring(0,partLength);

    var partNum = parseInt(part,10);
    var partAdd = (addup==0)?0:(5*Math.pow(10,partLength-1));
    var partRes = Math.floor(partNum/2)+partAdd;
    var partRem = partNum%2;

    result = result + partRes;

    if (depth > 0) {
        for (var i=result.length; i < partLength; i++) {
            result = "0"+result;
        }
    }

    var nextPart = number.substring(partLength, number.length);

    if (partLength < number.length) {
        var res = divide2(nextPart, partRem, depth+1);
        result = result + res.result;
        res.result = result;
        return res;
    } else {
        var res = {result: result, remainder: partRem};
        return res;
    }
}

function toBinary(number) {
    var out = "";

    while (number.length > 1 || number != "0") {
        var res = divide2(number,0,0);
        out = "" + res.remainder + out;
        number = res.result;
    }

    return out;
}

var testNum = "12312312312112312312312312312312312312312312312312312312312312312312312312312312312312312312123";
document.write("bin("+testNum+") = "+toBinary(""+testNum)+"<br/>");

Деление на куски требуется для вычисления деления на 2 быстрее.Этот скрипт работает довольно быстро даже для огромных чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...