Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
554 views
in Technique[技术] by (71.8m points)

printf - Unsigned int in C behaves negative

I don't understand why the output of an unsigned int is negative for the following code. Just like a signed int.

  uint32_t yyy=1<<31;
  printf("%d
",yyy);

The output is:

-2147483648

which is -2^31.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...