Рассмотрим две простые функции:
int return0Comp(){
return (~0);
}
int returnNeg1(){
return -1;
}
Я знаю, что в системе с двумя дополнениями, ~0==-1
, но из-за того, что система не использует это (это даже случается? *), эти две функции будут возвращать разные значения?
Стандарт гласит [expr.unary.op.10]
Операнд ~ должен иметь целочисленный или незаданный тип перечисления;
результат — дополнение его операнда.
Я прочитал это, что ~
всегда просто инвертирует все биты, поэтому интерпретация результата действительно должна зависеть от используемого представления.
Других решений пока нет …