永发信息网

简单的C语言题..

答案:4  悬赏:10  手机版
解决时间 2021-06-05 19:19
  • 提问者网友:暗中人
  • 2021-06-05 11:22

有这么个程序..

#include<stdio.h>
void main()
{
unsigned int a=65535;
int b=-2;
printf("a=%d,%o,%x,%u\n",a,a,a,a);
printf("b=%d,%o,%x,%u\n",b,b,b,b);
}
TC的运行结果是

a=-1,177777,ffff,65535

b=-2,177776,fffe,65534

VC++的运行结果是

a=65535,177777,ffff,65535
b=-2,37777777776,fffffffe,4294967294

请问这些都是怎么得出来的? 还有为什么会出现不同 谢谢

最佳答案
  • 五星知识达人网友:想偏头吻你
  • 2021-06-05 12:20
内存默认的存储字长不同,在VC下都是32位模式,int已经都改为4字节了
全部回答
  • 1楼网友:行路难
  • 2021-06-05 15:55
%d表示十进制,%o是八进制,x%是十六进制,%u是无符号类型, 明白了吧?
  • 2楼网友:胯下狙击手
  • 2021-06-05 14:32

不同的编译器的int所占的字长不同 而你的这个无符号数字65535又恰好是临界值 所以不同的字长就会出现不同的运行结果的

你可以分别在两个编译器下执行这个语句printf(sizeof(int));

  • 3楼网友:街头电车
  • 2021-06-05 13:28
TC好像int是占用2个字节 VC6.0 int 占用4个字节 符号位计算方式不同吧。 我猜的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯