变量取值范围与存储大小

问题描述:

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

问题解答:

我来补答
先说整数吧有符号的是 -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,%d\n",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
 
 
展开全文阅读
剩余:2000