Гарантирует ли стандарт C ++ 11, что унарный минус нулевого значения целое число со знаком равно нулю?
Например:
int zero = 0;
int n = -zero;
int m = -0;
assert(memcmp(&n, &zero, sizeof(int)) == 0);
assert(memcmp(&m, &zero, sizeof(int)) == 0);
I знаю, что -0
и 0
идентичны в представлении комплимента двух, но я хотел бы знать, допускает ли стандарт, чтобы отрицание целого нуля со знаком было отрицательным-ноль для других представлений, таких как комплимент или подпись
Все, что я мог найти в черновике C ++ 11, это §5.3.1, параграф 8:
Операнд унарного оператора должен иметь арифметику c или тип перечисления с незаданной областью и результатом является отрицание его операнда . Интегральное продвижение выполняется для целочисленных или перечислимых операндов. Отрицание числа без знака вычисляется путем вычитания его значения из 2 ^ n, где n - количество битов в повышенном операнде. Тип результата - это тип повышенного операнда.
Я не могу найти определение отрицание в черновике.
Мотивация : я пишу специализированный синтаксический анализатор целых чисел для библиотеки (которая может быть в конечном итоге с открытым исходным кодом), и я хочу знать, следует ли мне беспокоиться о возможности интерпретации "-0"
как отрицательного нуля целое число со знаком на необычных архитектурах.
Примечание : я уже знаю о числах с плавающей точкой с отрицательным нулем.