2016-06-15 3 views
1

С EMCAScript6, я вижу, что есть способ представить binary literals с использованием префикса 0b или 0B. Я экспериментировал с ним и не мог найти способ представить отрицательное число (поскольку он не использует два дополнения). Я что-то упускаю? Я не могу найти, где бинарные литералы объясняются в фактической спецификации.ECMAScript 6 отрицательный двоичный литерал

Я полагаю, я мог бы осуществить это сам с операцией как ~(num - 1) или -num:

function twosComplement(num) { 
 
    return ~(num - 1); 
 
} 
 

 
var flag = 0b100; 
 

 
console.log(flag); 
 
console.log(twosComplement(flag)); 
 

 
// is this output normal? I thought binary used a sign bit 
 
console.log(twosComplement(flag).toString(2));

+0

'-0b100'? Я не думаю, что бинарные литералы (или любые другие числовые литералы) должны рассматриваться как привязанные к конкретному двоичному представлению, поэтому вам нужно указать отрицательное значение литерала, если вы хотите получить отрицательный результат. –

+0

@JeremyBanks Вероятно, вы правы. Я был взволнован на мгновение, что, возможно, они не отвлекли это. Есть ли спецификация? – 4castle

+2

Числовые литералы [здесь] (http://www.ecma-international.org/ecma-262/6.0/#sec-literals-numeric-literals) в спецификации, которая включает * BinaryIntegerLiteral *, хотя она не похоже, указывает префикс '-', поэтому я думаю, что это просто оператор отрицания. –

ответ

0

Для ввода отрицательного числа только префикс ваш буквальным с - знаком (унарный оператор минус):

-0b11010 // -26 

Спецификация для бинарных литров ls находится в разделе Numeric Literals.

Соответствующий фрагмент:

ЧисловойЛитерал :: (...) BinaryIntegerLiteral

BinaryIntegerLiteral :: 0B BinaryDigits

И BinaryDiggits являются 0 и 1.

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