Последнее время на собеседованиях попадаются задачки такого вида: ~~3.14 // 3
или ~0 // -1
и у первой, и у второй ответ довольно неожиданный.
Вопрос, почему? Из того, что я знаю о представлении чисел с плавающей точкой в памяти компьютера… второе еще можно как-то понять, но первое?
The production UnaryExpression: ~ UnaryExpression is evaluat ed as follows:
1. Let expr be the result of evaluating UnaryExpression.
2. Let oldValue be ToInt32(GetValue(expr)).
3. Return the result of applying bitwise complement to oldValue. The result is a signed 32-bit integer.