Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
632 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 Reply

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...