zl程序教程

您现在的位置是:首页 >  后端

当前栏目

变量超出取值范围会怎样?

变量 怎样 范围 取值 超出
2023-09-11 14:20:26 时间

第一次 出现 integer 内存溢出,  引用了第三方库 造成的结果

https://zhidao.baidu.com/question/1701926690525808180.html

变量超出取值范围会怎样?

例如int类型取值范围是-21768~+32767。假如有一个int型变量,即使超出了也一样可以输出正确的结果,那取值范围有什么意义呢?虚心求教。
匿名 | 浏览 756 次 |举报
发布于2015-07-13 21:56 最佳答案
 
  -32768~+32767
  这是在16位编译器(如Turbo C 2.0)里的取值范围,是很久以前的取值范围,现在的计算机和以前不同了,都流行32位的处理器了。

  int型在PC上一般都占4个字节的内存,也就是用 11111111 11111111 11111111 11111111 这32位的二进制数来表示int型变量的数值,可表示的数值范围可不止-21768~+32767这么点了;

  无符号整形(unsigned int)变量的取值范围为:0~4294967295 ;
  而整形(int)变量的取值范围为:2147483648~2147483647 .

  如果你的值超出取值范围,也就是超出int型变量的内存空间,那就内存溢出,影响到其它变量的值,因为其它变量和这个int型变量的内存空间是相邻的。
  解决方法,可用更大的取值范围的类型代替,实在不行的话,用字符串代替。
 

杨柳风83  V1 | 中小学教师向TA咨询

擅长: 数学

其他回答

与内存开销有关,不同类型的变量所占内存大小有所不同。尽量使用较小的数据类型,可以节约内存

你说超出了取值范围也可以输出正确结果,不会吧。超出了范围应该会有异常的。不晓得 你是学的哪门语言,至少 java C C++ C# 是这样的。
热心网友发布于2013-12-21 22:19
评论 
1
-21768~+32767? 应该是-32768~+32767吧?这是在16位编译器(如Turbo C 2.0)里的取值范围,是很久以前的取值范围,现在的计算机和以前不同了,都流行32位的处理器了。

int型在PC上一般都占4个字节的内存,也就是用 11111111 11111111 11111111 11111111 这32位的二进制数来表示int型变量的数值,可表示的数值范围可不止-21768~+32767这么点了;

无符号整形(unsigned int)变量的取值范围为:0~4294967295 ;
而整形(int)变量的取值范围为:2147483648~2147483647 .

如果你的值超出取值范围,也就是超出int型变量的内存空间,那就内存溢出,影响到其它变量的值,因为其它变量和这个int型变量的内存空间是相邻的。
解决方法,可用更大的取值范围的类型代替,实在不行的话,用字符串代替。