Як ми знаємо, переповнення цілим числом із підписом є невизначеною поведінкою . Але в документації C ++ 11 є щось цікаве cstdint
:
підписаний цілочисельний тип із шириною рівно 8, 16, 32 та 64 біта відповідно без бітів заповнення та використовуючи доповнення 2 для від’ємних значень (надається лише у тому випадку, якщо реалізація безпосередньо підтримує тип)
І ось моє запитання: так як стандарт прямо говорить , що для int8_t
, int16_t
, int32_t
і int64_t
негативних чисел 2 - х комплемент, по - , як і раніше переповнення цих типів невизначеного поведінки?
Редагувати Я перевірив стандарти C ++ 11 та C11, і ось що я знайшов:
C ++ 11, § 18.4.1:
Заголовок визначає всі функції, типи та макроси так само, як 7.20 у стандарті C.
C11, § 7.20.1.1:
Ім'я typedef
intN_t
позначає підписаний цілий тип із шириною N, без бітів заповнення та поданням доповнення двох. Таким чином,int8_t
позначає такий підписаний цілий тип із шириною рівно 8 біт.