标题: C语言变量赋值问题 [打印本页]

作者: 李冬    时间: 2022-5-28 09:01
标题: C语言变量赋值问题
为什么给变量赋值,超过数据类型最大值,编译为什么不报错

51hei图片_20220528085901.png (33.87 KB, 下载次数: 95)

51hei图片_20220528085901.png

作者: 188610329    时间: 2022-5-28 11:27
给变量赋值,超过数据类型最大值,属于:溢出
而溢出, 属于正常范畴,并不属于错误,所以,编译器直接用有效位继续编译,是不会报错的。

举个简单的例子, 一个 uchar 类型变量,0~255  当你255的时候继续+1, 就会归0,这是正常的,不属于错,而判断是否溢出,就要你通过程序检测标志位来决定,是用进位,还是做别的处理。
作者: Hephaestus    时间: 2022-5-28 12:31
float表示最大范围是-3.4e38 ~ 3.4e38,你这才4.5e6,是不是上学的时候没学过科学计数法啊!?
作者: 18701931930    时间: 2022-5-28 14:54
编译器只管语法对错
作者: yaoyao2022    时间: 2022-5-28 18:00
编译器不检查变量的有效范围哦
作者: 李冬    时间: 2022-5-30 10:06
Hephaestus 发表于 2022-5-28 12:31
float表示最大范围是-3.4e38 ~ 3.4e38,你这才4.5e6,是不是上学的时候没学过科学计数法啊!?

看清小数点
作者: Hephaestus    时间: 2022-5-30 12:52
李冬 发表于 2022-5-30 10:06
看清小数点

你回初中学习什么叫科学计数法去!
作者: taosys    时间: 2022-5-30 16:37
c语言报错好像只管语法错误,别的不管
作者: Hephaestus    时间: 2022-5-30 18:16
杨鑫荧 发表于 2022-5-30 17:09
给变量赋值,超过数据类型最大值,属于:溢出 而溢出, 属于正常范畴,并不属于错误,所以,编译器直接用有 ...

你没学过科学计数法?根本就没超过类型最大值!
作者: 188610329    时间: 2022-5-30 18:59
现在的人,真的很喜欢:  抛开本质,看现象……

问题的本质是什么?
问题的本质只有一句话:  为什么给变量赋值,超过数据类型最大值,编译为什么不报错

针对这个问题:
学过编程基础的人都知道。
你定义一个 char  a;  (-128~ 127)
你让  a = 300;  
会报错么??

那么,实际试验的时候,定义的数字有没有真的超限,还重要么?
作者: 3253087609ydrq    时间: 2023-10-26 23:26
Hephaestus 发表于 2022-5-30 12:52
你回初中学习什么叫科学计数法去!

他写的是"4500000.9000000"中间有个小数点,读法是四百五十万点九,至于为什么9后面为什么加那么多的零我不知道
作者: Hephaestus    时间: 2023-10-27 07:55
3253087609ydrq 发表于 2023-10-26 23:26
他写的是"4500000.9000000"中间有个∈悖练ㄊ撬陌傥迨虻憔牛劣谖裁�9后面为什么加那么多的零 ...


float表示最大范围是-3.4e38 ~ 3.4e38,你这才4.5e6,是不是上学的时候没学过科学计数法啊!?

作者: 大漠落日    时间: 2023-10-27 08:19
编译器只取有效位数,超出精度范围的没有用,会舍弃掉的。
作者: 3253087609ydrq    时间: 2023-11-10 00:01
Hephaestus 发表于 2023-10-27 07:55
float表示最大范围是-3.4e38 ~ 3.4e38,你这才4.5e6,是不是上学的时候没学过科学计数法啊!?

小学只学了a×10(1≤a<10)这种,没学关于e的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1