The format specifier for %d
expects an int
, not an unsigned int
, so the code has undefined behaviour. From the C99 standard section 7.19.6.1 The fprintf function:
If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.
Use %u
for unsigned int
:
uint32_t yyy=1u<<31;
printf("%u
",yyy);
Output:
2147483648
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…