Вопрос о поведении C для неподписанного целого нижнего streamа

Во многих местах я читал, что целочисленное переполнение корректно определено на языке C в отличие от подписанного аналога.

Является ли нижний stream одинаковым?

Например:

unsigned int x = -1; // Does x == UINT_MAX? 

Благодарю.

Я не могу вспомнить, где, но где-то я читал, что арифметика на неподписанных интегральных типах является модульной, поэтому, если это так, тогда -1 == UINT_MAX mod (UINT_MAX + 1).

    §6.2.5, пункт 9:

    Вычисление с использованием неподписанных операндов никогда не может переполняться, потому что результат, который не может быть представлен результирующим беззнаковым целочисленным типом, уменьшается по модулю число, которое больше одного наибольшего значения, которое может быть представлено результирующим типом.

    Редактировать:

    Извините, неверная ссылка, но результат все еще закреплен. Правильная ссылка – §6.3.1.3 (преобразование целых чисел без подписей и без знака):

    если новый тип без знака, значение преобразуется путем многократного добавления или вычитания более чем максимального значения, которое может быть представлено в новом типе, пока значение не будет в диапазоне нового типа.

    Итак, да, x == UINT_MAX .

    -1, когда он выражается как номер дополнения 2, составляет 0xFF … F для того, как много бит вашего номера. В пространстве без знака это значение является максимальным возможным значением (т.е. все биты установлены). Поэтому да, x == UINT_MAX. Следующий код генерирует «1» в строгом компиляторе C99:

     #include  #include  #include  int main(int argc, char **argv){ uint32_t x = -1; printf("%d", x == UINT_MAX ? 1 : 0); return 0; } 

    Вы смешиваете подписанные и неподписанные числа, которые являются неактивными.

     unsigned int x = 0u - 1u; // is OK though 
    Interesting Posts

    Visual Studio – поиск по коду для китайского текста

    Сформировать все возможные комбинации элементов некоторых векторов (декартово произведение)

    Готово ли java final помочь компилятору создать более эффективный байт-код?

    Вычисление суммы двух переменных в пакетном скрипте

    Java Inheritance – вызов метода суперclassа

    Как добавить push-уведомление в мое собственное приложение для Android

    Доступ к локальному ПК ПК с подключенного к USB мобильному устройству Android

    Редактирование жесткой ссылки не редактирует исходный файл

    Матричный class C ++

    Каков правильный способ перегрузить operator == для иерархии classов?

    Извлечение «одного из каждых 10 кадров» в видео с использованием VLC или FFmpeg

    C # маленький конец или большой endian?

    Делают ли c ++ шаблоны медленными?

    Как я могу перемещать или принудительно устанавливать программу в другое место, даже если оно не поддерживается?

    Как работает экзистенциальный оператор CoffeeScript?

    Давайте будем гением компьютера.