2016-09-19 3 views
1

Предположим, мы имеем следующий код:Побитовые операции переносимы?

int j = -1 & 0xFF; 

Полученное значение в j может быть один из следующих на основе базового представления:

System   Value 
Two's complement 0xFF 
One's complement 0xFE 
Sign/Magnitude  0x01 

Но являются &, | и ^ операторов в C всегда определяется в терминах дополнения двух (таким образом, j всегда будет равно 0xFF), или они определяются в терминах базового представления системы?

+0

В качестве общего совета следует избегать использования знаковых целых чисел для бит-ops, а также левого операнда бит-сдвигов (правый операнд вряд ли может быть достаточно большим, чтобы вызвать проблемы). – Olaf

ответ

2

Они определены в терминах представления фактического бита. Из C11 final draft:

результат двоичного & оператора является побитовое И из операндов (то есть, каждый бит в результате устанавливается, если и только если каждый из соответствующих битов в преобразованных операндов устанавливается).
...
Результатом оператора^является побитовое исключающее ИЛИ операндов (то есть каждый бит в результате устанавливается тогда и только тогда, когда задан только один из соответствующих битов в преобразованных операндах).
...
Результат | оператор является побитовым включением ИЛИ из операндов (то есть каждый бит в результате устанавливается тогда и только тогда, когда установлен хотя бы один из соответствующих битов в преобразованных операндах).

+0

Значит, даже квантовый процессор должен подчиняться этому для своих регистров? Конечно, для всех размеров кубитов? –

+0

Поэтому должно быть, что только неотрицательные побитовые операции переносимы. – owacoder

+0

@huseyintugrulbuyukisik: Программирование квантового процессора на классическом языке программирования не имеет смысла - если бы это было возможно вообще. Но если вы хотите назвать этот стандарт совместимым, конечно, это необходимо. Это основная идея ** любого ** стандарта. Разумеется, вызывать винты, совместимые с ISO4032, также подразумевают определенные свойства. – Olaf

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