【发布时间】:2015-01-24 03:12:36
【问题描述】:
我编写了这个程序作为练习来理解有符号和无符号整数如何
在 C 工作。
这段代码应该只打印-9 加上存储在变量c 中的-4+-5
#include <stdio.h>
int main (void) {
unsigned int a=-4;
unsigned int b=-5;
unsigned int c=a+b;
printf("result is %u\n",c);
return 0;
}
当这段代码运行时,它会给我一个意想不到的结果4294967287。
我也将c 从unsigned 转换为signed integer printf ("result is %u\n",(int)c);
但也不起作用。
请有人解释为什么程序没有给出确切的结果?
【问题讨论】:
-
你期待什么结果?你知道“补码”表示吗?
-
只需将
-9添加到变量c中存储的c,我已经编辑了我的问题。 -
您将其作为实验。现在您知道会发生什么,您应该阅读有关数字的存储方式以及语言如何解释它们的信息。看看你是否可以预测当你尝试一些其他时髦的计算时会发生什么 - 然后尝试它们
标签: c types casting unsigned signed