【变量取值范围与存储大小先说整数吧有符号的是-32768~--查字典问答网
分类选择

来自单志广的问题

  【变量取值范围与存储大小先说整数吧有符号的是-32768~-32767我为什么定义变量取1000000也可以.它的范围到底指的是什么.我知道它是16位.但是我搞不懂的是它取值范围莫非不能大于16位2个字节?】

  变量取值范围与存储大小

  先说整数吧有符号的是-32768~-32767我为什么定义变量取1000000也可以.它的范围到底指的是什么.我知道它是16位.但是我搞不懂的是它取值范围莫非不能大于16位2个字节?再说CHAR型一个字节的存储.那我为啥存放一篇文章那么多的字串也可以?难道一篇文章不足1字节.但是在硬盘又显示出了实际大小.麻烦说下.

1回答
2019-12-24 16:42
我要回答
请先登录
霍宏涛

  先说整数吧有符号的是-32768~-32767我为什么定义变量取1000000也可以.首先整数分为byte,short,int,long和longlong.你说的这个范围是半字(halfword)也就是short.严格的来说,给short变量赋值为1000000是不被允许的,编译器至少会报Warning,更重要的是由于溢出,所以实际上它的值已经不是1000000,而是16960.它的范围到底指的是什么.我知道它是16位.但是我搞不懂的是它取值范围莫非不能大于16位2个字节?short类型的范围就是你说的-32768到32767,不能超过16位2个字节.一旦超过就等于从头来了.例如你给它赋值为32768,它就当做是-32768了,赋值为-32769就当做是32767了.以上例子如下所示:[root@me]$cat1.c#includemain(){shorta=1000000;shortb=32768;shortc=-32769;intd=1000000;printf("%d,%d,%d,%dn",a,b,c,d);}[root@me]$gcc1.c1.c:Infunction'main':1.c:4:warning:overflowinimplicitconstantconversion1.c:6:warning:overflowinimplicitconstantconversion[root@me]$./a.out16960,-32768,32767,1000000再说CHAR型一个字节的存储.那我为啥存放一篇文章那么多的字串也可以?难道一篇文章不足1字节.但是在硬盘又显示出了实际大小.char类型就是一个字节的存储,不可能存放一篇文章那么多的字符串.如果这么书写代码的话,编译器至少报Warning,执行必然是数组越界报告段错误.麻烦说下.不麻烦,如果有用请采纳,PS.数据宽度和取值范围是随着CPU和编译器变化的,例如long在有的机器上是32位,有的则为64位,例如char的取值范围可能是-128至127,但在-funsigned-char选项编译时则范围是0至255

2019-12-24 16:45:19

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •