c的小白求大神解答!

nxbtch 2011-10-04 07:19:53
#include<stdio.h>
main()
{
short c;
c = 378657884;
printf("%d", c);
}



运行的结果竟然是 -9124 我表示无语 不知道为什么
我知道他溢出了 但为何不报错呢? 还有再加长的话他就会报错 我用的是c free
什么时候会错呢? 又如何才能无限制的输入一个数呢? 很大很大的情况下
希望各位大神能详细解答啊!
...全文
171 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
gsprest 2011-10-07
  • 打赏
  • 举报
回复
取决于它的二进制后16位,第一位为符号位,其它为补码。
熟悉原码、反码、补码,以及数据类型的合理应用。
nxbtch 2011-10-07
  • 打赏
  • 举报
回复
谢谢各位啊
寂寞读南华 2011-10-07
  • 打赏
  • 举报
回复
5楼好专业
gaoxingcool 2011-10-07
  • 打赏
  • 举报
回复
六楼 威武
lengxujun 2011-10-06
  • 打赏
  • 举报
回复
printf("%d", c);
printf看到%d会从堆栈上取一个int,如果sizeof(int) > sizeof(short),
那就意味着有一部分不是来自于c的副本,另一部分不确定,输出当然是奇怪的数字。
况且printf只是去读取,而没有写操作,是不会报错的(我在这里理解lz“报错”是
指程序崩溃等,而非编译期错误)。
qq120848369 2011-10-06
  • 打赏
  • 举报
回复
好大的二进制,你却只给它16bits,自然是先截断高位的二进制,然后根据主机字节序存储。
w372011482 2011-10-06
  • 打赏
  • 举报
回复
定义一个long型的肯定管用
大昊 2011-10-06
  • 打赏
  • 举报
回复
截断了,就算是float也会溢出,只是结果不一样,写代码还是要控制一下
AnYidan 2011-10-04
  • 打赏
  • 举报
回复
printf("%d", sizeof(short));

你给你的BWM加了柴油,能怪谁
quwei197874 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jingsuxuyilq 的回复:]
是这样的,(378657884)10=(10110100100011101110001011100)2,当你把这个值给short型时发生截断,因为short为2个字节,截后16位1101110001011100,最高位为1,是负数,其他的15位为补码,把它转成十进制后就为-9124
[/Quote]++
jingsuxuyilq 2011-10-04
  • 打赏
  • 举报
回复
是这样的,(378657884)10=(10110100100011101110001011100)2,当你把这个值给short型时发生截断,因为short为2个字节,截后16位1101110001011100,最高位为1,是负数,其他的15位为补码,把它转成十进制后就为-9124
辰岡墨竹 2011-10-04
  • 打赏
  • 举报
回复
没有,因为编译时只会把你的代码编译为二进制指令,并不会对你的这些进行检查。
你之所以再加大会出错是编译器不支持了,支持的整数只有2^32次方,就是unsigned int的上限。
Intel等很多体系的CPU也不会对整数溢出进行特别的处理,只不过会设置一个溢出标志。
因为整数运算太常用,如果频繁去检查是否溢出,会产生很多冗余代码和分支。
不过Intel的CPU进行浮点运算时,如果发生溢出,是会触发异常的,但是多数情况下这个异常的处理就是什么也不做,那样会不必要的过多打断程序。
cpprogrommer 2011-10-04
  • 打赏
  • 举报
回复
为什么要报错?结果是由你控制的
缺媳妇的郝 2011-10-04
  • 打赏
  • 举报
回复
C语言不检查边界问题,意思就是甭管你输啥,绝对不检查,更不会报错。这个考虑到效率的问题。想要无限制的输入一个大数,只能自己写函数实现,呃,感觉没意义,不过适合初学练习。
灼眼的超哥 2011-10-04
  • 打赏
  • 举报
回复
这样可以:

#include<stdio.h>
main()
{
long int c;
c = 378657884;
printf("%d", c);
}

这样也可以:

#include<stdio.h>
main()
{
long unsigned int c;
c = 378657884;
printf("%d", c);
}
mengmingtao 2011-10-04
  • 打赏
  • 举报
回复
c的short类型最多支持65536个数,16字节;
int类型一般支持32字节。
再大的数的话要用到专门的库才能支持,默认不支持。

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧