变量取值范围与存储大小先说整数吧有符号的是 -32768~-32767 我为什么定义变量取1000000也可以.它的范围

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

海兰色 幼苗

共回答了25个问题采纳率:92% 举报

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

1年前

7
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.017 s. - webmaster@yulucn.com