4.5 Целые числа ¶
- Любые расширенные целочисленные типы, которые существуют в реализации (C99 и C11 6.2.5).
GCC не поддерживает расширенные целочисленные типы.
- Используются ли для знаковых целочисленных типов представление со знаком и модулем, дополнительный код или код по модулю единицы, и является ли исключительное значение представлением ошибки или обычным значением (C99 и C11 6.2.6.2).
GCC поддерживает только целочисленные типы в дополнительном коде, и все битовые шаблоны являются обычными значениями.
- Ранг любого расширенного целочисленного типа относительно другого расширенного целочисленного типа с той же точностью (C99 и C11 6.3.1.1).
GCC не поддерживает расширенные целочисленные типы.
- Результат или сигнал, генерируемый при преобразовании целого числа в знаковый целочисленный тип, когда значение не может быть представлено в объекте этого типа (C90 6.2.1.2, C99 и C11 6.3.1.3).
Для преобразования в тип шириной N значение уменьшается по модулю 2^N, чтобы попасть в диапазон типа; никакого сигнала не генерируется.
- Результаты некоторых побитовых операций над знаковыми целыми числами (C90 6.3, C99 и C11 6.5).
Побитовые операторы действуют на представлении значения, включая биты знака и величины, где бит знака рассматривается как непосредственно над битом наибольшего значения. Знаковый оператор ‘>>’ работает с отрицательными числами, используя расширение знака.
В качестве расширения языка C GCC не использует свободу, предоставляемую в C99 и C11, только для обработки некоторых аспектов знакового ‘<<’ как неопределенных. Однако -fsanitize=shift (и -fsanitize=undefined) будут диагностировать такие случаи. Они также диагностируются в случаях, когда требуются константные выражения.
- Знак остатка при целочисленном делении (C90 6.3.5).
GCC всегда следует требованию C99 и C11, что результат деления усекается к нулю.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/Integers-implementation.html