2015-01-12 3 views
1

У меня есть двоичное число, что-то вроде этого .. var data = "1100110010". Я пытаюсь преобразовать это в соответствующее подписанное десятичное число в Javascript.Как преобразовать двоичное число в десятичное число под знаком

Шаги, которые я использую являются следующие

1) var data = "1100110010"; var bin2dec = parseInt(data,2).toString(10);

BIN2DEC дает преобразованный десятичное число, как "818".

Но я также хочу получить доступ к двоичному числу со знаком.

Подписанное десятичное число для этого двоичного кода составляет «-206».

Как я могу получить доступ как к знаку, подписанному, так и без знака после заданного двоичного номера. Пожалуйста, дайте мне знать . Любые идеи помогли бы

ответ

0

Используя некоторый битного сдвиг фокусы

function uintToInt(uint, nbit) { 
    nbit = +nbit || 32; 
    if (nbit > 32) throw new RangeError('uintToInt only supports ints up to 32 bits'); 
    uint <<= 32 - nbit; 
    uint >>= 32 - nbit; 
    return uint; 
} 

uintToInt(818, 10); // -206 
  • Почему 818? Потому что это UINT значение вашего бинарной строки

    parseInt('1100110010', 2); // 818 
    
  • Почему 10? Потому что ваш подписанный INT представлен 10 бит в вашем двоичной строки

    '1100110010'.length; // 10 
    

Пожалуйста, обратите внимание, что для положительных чисел, вы не можете просто взять nbit = str.length; как строка не может быть 0 -padded, вам будете знать, сколько бит вы на самом деле с помощью

вы также можете бросить ошибку на uint > 4294967295


Для полноты

function intToUint(int, nbit) { 
    var u = new Uint32Array(1); 
    nbit = +nbit || 32; 
    if (nbit > 32) throw new RangeError('intToUint only supports ints up to 32 bits'); 
    u[0] = int; 
    if (nbit < 32) { // don't accidentally sign again 
     int = Math.pow(2, nbit) - 1; 
     return u[0] & int; 
    } else { 
     return u[0]; 
    } 
} 

intToUint(-206, 10); // 818 
+0

Спасибо за ответы .. Я получаю данные из шестнадцатеричного кода. Есть ли способ, который я могу найти, если шестнадцатеричный код является десятичным знаком или десятичным знаком без знака. и как конвертировать шестнадцатеричный код в точный знак десятичной цифры – Chait

1

Это то, что вы хотите?

var data = "1100110010"; 
var bin2dec = parseInt(data,2).toString(10); 
var signed = (data.substr(0,1) === '1' ? '-':'+') + parseInt(data.substr(1),2); 

Это даст вам -306 для подписанного номера. Я не уверен, была ли у вас опечатка в номере, указанном в вашем вопросе (-206).

Возможно, это не лучшее решение, но должно работать. Вы все равно можете проверить количество двоичных цифр, прежде чем принимать решение о его подписании.

+0

Это дает '-306' не' -206' –

+0

Я знаю, я думал, что это опечатка в вопросе. –

+0

В '32' битах' -206' '' 11111111111111111111111100110010', поэтому он выглядит так, как OP имеет целое число со знаком '10' –

2

Можно преобразовать двоичные числа в десятичные десятичные числа с использованием typed arrays JavaScript.

const unsigned = 0b1111111100110010; 
const [ signed ] = new Int16Array([0b1111111100110010]); 

console.log(unsigned); // => 65330 
console.log(signed); // => -206 

Я уверен, что это будет менее результативно, чем побитовые операции, но это, безусловно, меньше кода.

Смежные вопросы