Как преобразовать любое число в 1 или -1 со знаком, сохраненным с помощью побитового оператора? - PullRequest
1 голос
/ 03 июля 2019

Учитывая любое число, например 345,678 и -345,678, я хочу преобразовать 345,678 в 1 и -345,678 в -1.По сути, я хочу преобразовать любое число в 1 или -1 со знаком, сохраняемым с помощью побитового оператора.

Хотя я не знаю почему, я могу преобразовать любое число в -1 следующим образом:

345.678 | -1

Есть мысли?

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Вы могли бы взять идею этого вопроса подписать функцию в C, используя только битовые операторы

(x >> 31) & 1

и скорректировать результат, взяв побитовое ИЛИ вместо побитового И, чтобы получить 1 вместо 0 и -1 вместо 1

const sign = x => (x >> 31) | 1;

console.log(sign(345.678));
console.log(sign(-345.678));
1 голос
/ 03 июля 2019

Для любого целого числа от -2147483648 до 2147483647 вы можете сделать:

(number >> -1) | 1

Он вернет -1, если number отрицательно, и 1, если number положительно.Для нуля он вернет 1.

Он не работает с десятичными знаками в диапазоне -1 < number < 0!Однако это должно работать для других десятичных чисел.

...