2014-08-13 4 views
0

Я хотел бы узнать, есть ли расчет, который позволяет мне получить количество бит, которое мне нужно для хранения отрицательного (подписанного) значения (например, -1, -255, -1324 и т. Д.)?Как рассчитать, сколько бит необходимо для представления любого отрицательного значения?

На данный момент я реализовал функцию, чтобы вычислить это для значений, больших и равных 0:

calculateBitsNeeded = function (value) { 

    if (value == 0) { 

     return 1; 
    } 
    else if (value > 0) { 

     return Math.floor(Math.log(value)/Math.LN2) + 1; 
    } 
    else { 

     //TODO ... 
    } 
}; 

.: например Если у меня есть число -38 я должен был бы 7bits для хранения (101 1010).

Спасибо за любую помощь :)

+0

Любое число в JS, хранящееся в 64-битном формате. – hindmost

+0

@hindmost: Да, я знаю об этом. Но я пишу приложение, которое общается с сервером C++ на базе очень низкого уровня. Так что на самом деле мне приходится иметь дело с ArrayBuffers и т. Д. и нужно позаботиться о моих битах;) – Fidel90

+0

Итак, ваш вопрос не связан с Javascript. Пометьте его 'C++' – hindmost

ответ

1

Если предположить, что вы говорите о целом числа.

Чтобы ответить на ваш вопрос, вы должны понимать, что на всех современных платформах, целые числа, либо считаются подписали или неподписанный.

JavaScript на самом деле не поддерживает целые числа, они сохраняются как значения с плавающей запятой. Однако 64-разрядное число с плавающей запятой может обрабатывать 53-битные целые числа с полной точностью, поэтому он может легко обрабатывать 16-битные целые числа, используемые C.

Я собираюсь игнорировать те и ограничить свой ответ на 16 битных Интс, которые вы использовали бы поговорить с С.

A 16 бит Unsigned разрядное целое число может иметь значения: 0 - 65535

подписано целое число может иметь значения: −32,768 to 32,767

Под обоих кодирования, числа 0 - 32,767 сохраняются таким же образом. Никакой разницы в обращении.

Однако номера 32,768 - 0 хранятся с использованием системы, называемой two's compliment.

Бит мудрых, цифры -1 и 32,768 - то же самое. -2 и 32,767 - то же самое.

Итак, самый простой способ вычислить биты, необходимые для отрицательного целого, - это преобразовать его в его эквивалент.

+0

Он поддерживает только 53 целых числа точно? Или вы имеете в виду все 53-битные целые числа? –

+0

53-бит. Спасибо, что поймал это. –

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