Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Сколько оперативной памяти должен занимать тип type

#cpp


Сколько оперативной памяти должен занимать тип type, чтобы в
результате следующего фрагмента кода переменная c хранила –32767?

type a = 32767;
type b = 1;
type c = 1;
c = a + b;


Как решается такое задание?
    


Ответы

Ответ 1



Такое задание не имеет конкретного решения. В языке С++ не существует фундаментальных или стандартных библиотечных типов, которые давали бы результат -32767 при применении бинарного оператора + к объектам, хранящим значения 32767 и 1. Если же речь идет о некоем нестандартном типе, то ответ может быть практически любым. В языке С++ знаковое переполнение вызывает неопределенное поведение. То есть сумма двух положительных целых значений не может дать отрицательное значение, за исключением небольшой лазейки: если "переполнение" происходит не во время суммирования, а во время преобразования типов (от более широкого знакового целого к более узкому), то поведение не является неопределенным, а является определяемым реализацией. Таким образом, в рамках некоторой реализации, если type - это некий знаковый тип, более узкий , чем int, в диапазон которого не входит значение 32768, но при этом 32768 входит в диапазон типа int, то операнды в выражении a + b будет подвергнуты integral promotions до типа int, выражение будет вычислено в рамках типа int (без переполнения) и затем преобразовано обратно к type. При обратном преобразовании произойдет "переполнение" с результатом, определяемым реализацией. Теоретически, в какой-то реализации может получиться и -32767, в какой-то - 12345, в какой-то - еще что-нибудь... Но это все выходит далеко за рамки вопроса о том, сколько памяти должен занимать тип type.

Комментариев нет:

Отправить комментарий