Я нашел несколько вопросов по этой конкретной теме, но они касались C ++.
Насколько переносимо приведение -1 к беззнаковому типу?
преобразование -1 в беззнаковые типы
Безопасно ли присвоить -1 беззнаковому int, чтобы получить максимальное значение?
И при чтении ответов казалось вероятным или, по крайней мере, не маловероятным, что это одна из тех вещей, в которых C и C ++ отличаются.
Вопрос простой:
Если я объявляю переменную с unsigned char/short/int/long var или использую любые другие беззнаковые типы, такие как фиксированная ширина, минимальная ширина и т. Д., Будет ли тогда гарантировано, что var = -1 установит var на максимальное значение, которое он может удерживать? Гарантированно ли эта программа печатает Да?
#include <stdio.h>
#include <limits.h>
int main(void) {
unsigned long var = -1;
printf("%s\n", var == ULONG_MAX ? "Yes" : "No");
}
The requirements on unsigned arithmetic guarantee that casting -1 to an unsigned type will produce the largest number possible for the target type, и ответ также следует сThis is the same in C and C++. - person KamilCuk   schedule 28.01.2021C99, §6.2.5/9, так что это определенно верно для C. - person junix   schedule 28.01.2021