C中unsigned int的行为

use*_*460 4 c int unsigned

C中unsigned int的大小是0 to 65,535 or 0 to 4,294,967,295.

我用C中的以下代码进行了测试:

unsigned int number = 0;
number -= 300;
printf("%d\n", number);
Run Code Online (Sandbox Code Playgroud)

输出:-300

我记得如果unsigned int变量的值低于0,它应该环绕并且我期待输出类似于4294966996.但是从控制台打印的输出是-300.

我在C++中测试了类似的语句,它确实给了我4294966996.

我的问题是:为什么输出-300尽管它是一个unsigned int


PS:我查看了几个标题相似的帖子,但他们没有解决同样的问题:

在C中签名vs unsigned int

无符号整数差异的意外结果

小智 8

因为printf("%d\n", number);将打印带符号的值,即使参数是无符号的.使用printf("%u\n", number);为一个无符号的值被正确地打印.