signed int vs unsigned int (undefined behaviour ситуации)

326
04 марта 2017, 05:18

Если говорить просто и коротко, то меня интересует: количество и примеры undefined behaviour для каждого из этих типов.

Answer 1
  • Переполнение при выполнении арифметических операций над типом signed int приводит к неопределенному поведению.

  • Объектные представления как signed int, так и unsigned int могут иметь в своем составе padding биты, т.е. биты, не участвующие в формировании значения, а либо выполняющие вспомогательные функции, либо вообще не использующиеся. Комбинация значений padding битов может быть некорректной, т.е. формировать так называемые trap representations. Попытка доступа к trap representation приводит к неопределенному поведению. (Например, объектное представление целочисленного типа может содержать биты четности.)

    Язык, однако, гарантирует, что установка всех битов объектного представления целочисленного типа в 0 (в т.ч. padding битов) не может создать trap representation, а всегда приводит к формированию корректно представленного целочисленного значения 0. С практической точки зрения это означает, что memset(..., 0, ...) и calloc гарантированно формируют правильные нулевые значения для любых целочисленных типов.

  • Преобразование значений с плавающей точкой или значений указателей к любому целочисленному типу приводят к неопределенному поведению, если результирующее значение не помещается в диапазон целевого типа.

  • Реализации, основанные на прямом или обратном коде для signed int, имеют право запретить использование отрицательного нуля, т.е. расценивать представление отрицательного нуля как trap representation. В таком случае доступ к представлению отрицательного нуля приводит к неопределенному поведению.

  • Реализации, основанные на дополнительном коде для signed int, имеют право запретить использование представления с 1 в знаковом бите и с 0 во всех значащих битах, т.е. расценивать это представление как trap representation. В таком случае доступ к такому представлению приводит к неопределенному поведению. (Другими словами, в 16-битном signed int значение -32768 может быть "запрещено".)

READ ALSO
Получение минут и секунд из полного времени в виде строки

Получение минут и секунд из полного времени в виде строки

Есть функция _tctime которая форматирует число в строку следующего формата:

206
Как грамотно вычесть несколько минут из текущего времени в С++?

Как грамотно вычесть несколько минут из текущего времени в С++?

Уважаемые коллеги! Производственная необходимость просит написать текущее время за минусом 10 минут и у меня не очень-то получаетсяНапомню,...

234
Можно ли получить данные из постоянно обновляемого файла?

Можно ли получить данные из постоянно обновляемого файла?

Здравствуйте! Смотрите, есть файл, например, вот этот - "nashe1hostingradio

266
Сборка js-файла из es6 модулей с помощью gulp

Сборка js-файла из es6 модулей с помощью gulp

Не нашел статьи, где достаточно просто объяснён процесс сборки javaScript-файла из ES6-модулей с помощью gulpЗадача данного вопроса - совместными...

376