Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как инвертировать байты? 100 => 011 (https://javascript.ru/forum/misc/83695-kak-invertirovat-bajjty-100-%3D-011-a.html)

jaroslav.tavgen 15.02.2022 13:53

Как инвертировать байты? 100 => 011
 
Ожидание:
let inverted_number =  ~4; // 3

Реальность:
let inverted_number =  ~4; alert(inverted_number); //-5

Как привести реальность к ожиданиям?

ksa 15.02.2022 14:11

Цитата:

Сообщение от jaroslav.tavgen
100 => 011

В JS инверсия байтов работает не так... :nono:
https://learn.javascript.ru/bitwise-operators

ksa 15.02.2022 14:13

00000000000000000000000000000100

инвертируется в
11111111111111111111111111111011

ksa 15.02.2022 14:19

Цитата:

Сообщение от jaroslav.tavgen
Как привести реальность к ожиданиям?

Как вариант...
let val = 4
val = val.toString(2).replace(/1|0/g, _ => !+_ ? 1 : 0 )
alert(val)

Alexandroppolus 15.02.2022 16:39

Цитата:

Сообщение от jaroslav.tavgen
Как привести реальность к ожиданиям?

function inv(n) {
    let p = 1;
    while (p <= n) p *= 2;
    return ~n & (p - 1);
}

alert(inv(4));


работает только для натуральных чисел


Часовой пояс GMT +3, время: 21:15.