c语言 int的范围不是-32768~32767吗?为啥我输入了大于的数还是成立.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 int的范围不是-32768~32767吗?为啥我输入了大于的数还是成立.相关的知识,希望对你有一定的参考价值。
参考技术A 1c语言中,int若是规定大小为两个字节,则其最小值就是-32768
2
原因
两个字节是16位,规定第一位为符号位,则其能表示的数值范围是-2^15~2^15-1,即-32768~32767。但最小值为什么是-32768,为什么不是-32767呢?
原来人们发现若是在内存中直接存放数的原码,则0000
0000
0000
0000和1000
0000
0000
0000分别表示+0和-0,其值都是0,用两个值表示同一个值,这样太浪费空间了。
于是人们最后决定在内存中存放数的补码,这样+0和-0的存放形式就都是0000
0000
0000
0000了,但是同时也多出来一个1111
1111
1111
1111,它并不是任何一个数的补码,于是将其规定为-32768。
为啥C语言中float型变量的数据范围比int大
主要有如下三个区别:
1、表示的数据范围不同。C语言中的int变量通常的表示范围为-2147483648~2147483647,也就是-2^31到2^31之间。而-3.4E+38 ~ 3.4E+38则是float类型表示的数据范围。float表示的数据范围要大于int表示的数据范围。
2、变量赋值方法不同。C语言中,将i设定为一个int变量并赋值的方法为:int i=xx;,其中xx为一个整数,例如3、4、5,不可以是小数。将i设定为一个float变量的方法为:float i=yy;,其中yy为一个浮点型数,可以带上小数点,例如3.0、4.5、5.7等等。
3、字节构成不同。int和float类型在计算机中都占4个字节,但是float类型的4个字节构成为包括一个符号位、一个8位二进制指数和一个23位尾数,而int类型的4个字节构成全部为整数。
参考技术A 浮点数的本质是采用科学计数法,所以表示范围能够扩大很多倍,付出的代价是牺牲了精度,精度变成动态的了、与数值大小成正比。以上是关于c语言 int的范围不是-32768~32767吗?为啥我输入了大于的数还是成立.的主要内容,如果未能解决你的问题,请参考以下文章
C语言中有符号基本整型[signed]int 取值范围(-32768——32767)是怎么算出来的?