Я просто попытался опустить без знака int ниже 0. К моему удивлению, это работает!Почему беззнаковый int ниже нуля возможен?
#include<stdio.h>
int main(void)
{
unsigned int foo = 5;
foo -= 10;
printf("%d", foo);
return 0;
}
Собран с
clang -Weverything main.c
Эта программа returnes
-5
Как this пост и мои личные состояния знаний, это не представляется возможным. Но почему это работает? Я что-то упускаю? Это из-за неопределенного поведения? Или это printf? Или что-то другое?
Ах. Это то, о чем я думал. Как я могу его изменить? Какая реальная ценность и как я могу это проверить? –
Эффект 'printf' уже получил ответ. Теперь, чтобы убедиться, что компилятор действительно не считает, что 'foo' отрицательный, добавьте следующее в конец:' if (foo <0) printf («this not not print»); ' – dxiv
О, хорошо. Моя идея состояла в том, чтобы использовать это как держатель государства для робота, и мне не нужно было бы защищать диапазон ниже нуля. Тогда это невозможно:/ –