signed char a = 128;
Предполагая, что байт равен 8 битам, это не определено?
Что я знаю, так это то, что назначение значения вне диапазона для типа со знаком не определено, но Бьярн Страуструп говорит на языке программирования C ++, что если я назначу целое число 255 для символа на 8-битной машине байтов, где символ подписан результат -1.
Всего 1 ответ
это не определено?
Нет.
Что я знаю, так это то, что присвоение значения вне диапазона для типа со знаком не определено
Тоже нет.
Правило, которое управляет этим, - преобразования между целочисленными типами. Является ли преобразование для инициализации или присвоения, не имеет значения.
При преобразовании целочисленного значения в целочисленный тип со знаком, если результат не может быть представлен, то:
В текущем стандарте C ++ 17: Полученное значение будет определено реализацией.
В следующем стандарте C ++ 20: значение будет совпадать с исходным значением по модулю 2 N , где N - ширина целевого типа (как и в случае целых чисел без знака). -1 совпадает с 255 по модулю 2 8 .
Обратите внимание, что в отличие от преобразования поведение арифметического переполнения со знаком не определено.