当前位置: 代码迷 >> C语言 >> [求助] 还是有点糊涂
  详细解决方案

[求助] 还是有点糊涂

热度:305   发布时间:2007-09-16 12:43:14.0
[求助] 还是有点糊涂

main()
{
unsined i=10,s;
int a=-24;
s=i+a;
printf("%d\n",i+a);

getch();
}
这个程序运行结果是多少呢?是-14还是一个很大的正数呢?

搜索更多相关的解决方案: 糊涂  

----------------解决方案--------------------------------------------------------
都不是。因为这个程序不能运行!
----------------解决方案--------------------------------------------------------

unsigned.拼写错误.


----------------解决方案--------------------------------------------------------

main()
{
unsigned i=10;
int a=-24;
printf("%d\n",i+a);

getch();
}

能运行啊.是-14,但要是换成这样
main()
{
unsined b=10;
int a=-24,c;
(a+b>6)?(c=1):(c=0);
printf("%d\n",c);

getch();
}
结果就是1,可是这个时候为什么A+B就那么大呢?而上面却是-14.怎么回事


----------------解决方案--------------------------------------------------------

#include<stdio.h>

int main()
{
unsigned i=10,s;
int a=-24;
s=i+a;
printf("%d\n",i+a);

getchar();
return 0;
}

这样后结果14``


----------------解决方案--------------------------------------------------------
是-14,年自己可以运行一下,再说一下,unsined应该是unsigned.
----------------解决方案--------------------------------------------------------

答案是-14的原因在于你在printf("%d",i+a);中用了%d,s所以你的结果还是有符号的整型数据。


----------------解决方案--------------------------------------------------------
我想是这样的,printf("%d\n",i+a);输出-14是因为%d的原因,如果你用%u无符号输出就是4294967282;这正是
(a+b>6)?(c=1):(c=0);
printf("%d\n",c);的输出结果是1的原因,因为在进行运算a+b时是将一般的整型换成无符号型进行计算的.
----------------解决方案--------------------------------------------------------
i+a这个表达式求解过程中发生了隐式转换,int型的变量a自动转换成了unsigned int型,变量a变成了一个非常大的正整数,用printf("%d\n",i+a)输出就是-14,用printf("%u\n",i+a)输出就是一个非常大的正整数。。。

----------------解决方案--------------------------------------------------------
  相关解决方案