为什么这个C程序输出负数?
我已将补值分配给无符号变量。
那么为什么这个C程序会输出负数呢?
#include<stdio.h>
#include<conio.h>
int main()
{
unsigned int Value = 4; /* 4 = 0000 0000 0000 0100 */
unsigned int result = 0;
result = ~ Value; /* -5 = 1111 1111 1111 1011 */
printf("result = %d", result); /* -5 */
getch();
return 0;
}
I have assigned the complement value in an unsigned variable.
Then why this C program outputs a negative number?
#include<stdio.h>
#include<conio.h>
int main()
{
unsigned int Value = 4; /* 4 = 0000 0000 0000 0100 */
unsigned int result = 0;
result = ~ Value; /* -5 = 1111 1111 1111 1011 */
printf("result = %d", result); /* -5 */
getch();
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
%d
格式说明符指示printf
将参数视为有符号整数。请改用%u
。The
%d
format specifier instructsprintf
to treat the argument as a signed integer. Use%u
instead.这是因为 %d 是signed int 格式占位符,所以它被转换。使用 %u 表示无符号。
It's because %d is the signed int format placeholder, so it's getting converted. Use %u for unsigned.