Предположим, мы имеем следующий код:Побитовые операции переносимы?
int j = -1 & 0xFF;
Полученное значение в j
может быть один из следующих на основе базового представления:
System Value
Two's complement 0xFF
One's complement 0xFE
Sign/Magnitude 0x01
Но являются &
, |
и ^
операторов в C всегда определяется в терминах дополнения двух (таким образом, j
всегда будет равно 0xFF
), или они определяются в терминах базового представления системы?
В качестве общего совета следует избегать использования знаковых целых чисел для бит-ops, а также левого операнда бит-сдвигов (правый операнд вряд ли может быть достаточно большим, чтобы вызвать проблемы). – Olaf