математика — C / C ++ Отрицание переменной целого типа со значением 0

Я хочу передать версию измененного знака некоторого значения в функцию. Я знаю, как проверить переполнение, если знак меняется, но я не знаю об этом одном случае.

int apple( int );

int a = 0;

apple( -a );

Это определенное поведение охватывается стандартом C / C ++? Я передаю -0, я бы предположил, когда == 0. Как насчет использования что-то вроде этого: a ? -a : a ? Спасибо

1

Решение

-a для случая a == 0 хорошо определено. Стандарт требует, чтобы он все еще был нулевым.

Это не гарантирует, что «биты» в значении не изменятся (они предназначены для дополнения до двух, но не для дополнения до единицы, в этом случае значение равно «отрицательный ноль», какой бы ни была битовая комбинация этого значения). Но значение должно быть истинным для if (!x) или же if (x == 0), даже если x имеет значение «отрицательный ноль» — это зависит от производителя компилятора и / или процессора, чтобы убедиться, что он работает.

2

Другие решения

Отрицание целого числа значением 0 доходность 0, Там нет необходимости какой-либо специальной обработки.

1

Как в математике, в C ++ -0 == 0,

Хотя реализация может использовать свои дополнения (и, следовательно, могут быть битовые комбинации как для 0, так и для -0), это не меняет имея в виду значения и любые дополнительные вычисления, необходимые для обработки конкретного -0 case будет простой деталью реализации и будет полностью прозрачным для вас как для программиста.

1

Нет отрицательного 0 с целочисленными типами. Отрицание 0 приводит к 0. Нет необходимости избегать отрицания.

-2
По вопросам рекламы [email protected]