关于C语言数据类型选择的一个注意
2017-06-30 23:07
316 查看
很久之前买了《C Primer Plus》回来学C语言,刚开始看的时候,觉得前面的讲数据类型的那章的题目简单,就没有去做,学到后面感觉前面的有点陌生了,就回来做一下题去复习一下知识点。(看过这本书的人应该都有一种感受,这本书每一章的内容都比较的厚实,讲的都比较细致,基本上与那一章的主要内容有关的知识点都会被提及,对入门的人来说这可以省掉很多调错的麻烦。)结果做到第六题时,怎么修改和编译都有问题。
这道题目的内容如下:
1个水分子的质量约为3.0e-23克。1夸脱水大约是950克。编写一个程序,提示用户输入水的夸脱数,并显示水分子的数量。
我的初始代码如下:
修改后的代码如下:
对比一下,可能觉得是数据类型有问题,刚开始用的是整型int,而后面改为浮点型float。
而导致这个问题的原因,我最开始认为是我的整型int的范围不够,后面我有试着改成了系统支持的最大整型unsigned long long,发现编译结果溢出为零,才发现这个数字过大,最大范围也不够。这时,我不得不更改为float型,才能够容下这个数据。这个例子让我知道了,一般相关的值与值的数据类型应该要相互对应好,这样一般可以避免范围不够造成的程序数据溢出。
另外,其中的代码中N的数据类型与m除以M后的结果的数据类型是完全不同的,N的整型,m除以M的结果是浮点型,这里就存在一个类型强制转化的风险,特别是浮点型转化为整型,会造成数据的丢失,结果不够精确。
总结就是:数据类型对应好,溢出bug不上门。
这道题目的内容如下:
1个水分子的质量约为3.0e-23克。1夸脱水大约是950克。编写一个程序,提示用户输入水的夸脱数,并显示水分子的数量。
我的初始代码如下:
#include<stdio.h> #define K 950 #define M 3.0e-23 int main(void) { int N = 0; float m = 0.0, MK =0.0; printf("请输入水的夸脱数:\n"); scanf("%f", &MK); m = MK * K; N = m / M; printf("这些夸脱水含有%d个水分子\n", N); return 0; }
修改后的代码如下:
#include<stdio.h> #define K 950 #define M 3.0e-23 int main(void) { float N = 0; float m = 0.0, MK =0.0; printf("请输入水的夸脱数:\n"); scanf("%f", &MK); m = MK * K; N = m / M; printf("这些夸脱水含有%e个水分子\n", N); return 0; }
对比一下,可能觉得是数据类型有问题,刚开始用的是整型int,而后面改为浮点型float。
而导致这个问题的原因,我最开始认为是我的整型int的范围不够,后面我有试着改成了系统支持的最大整型unsigned long long,发现编译结果溢出为零,才发现这个数字过大,最大范围也不够。这时,我不得不更改为float型,才能够容下这个数据。这个例子让我知道了,一般相关的值与值的数据类型应该要相互对应好,这样一般可以避免范围不够造成的程序数据溢出。
另外,其中的代码中N的数据类型与m除以M后的结果的数据类型是完全不同的,N的整型,m除以M的结果是浮点型,这里就存在一个类型强制转化的风险,特别是浮点型转化为整型,会造成数据的丢失,结果不够精确。
总结就是:数据类型对应好,溢出bug不上门。
相关文章推荐
- 关于MySQL的TinyInt数据类型在Delphi中作为Boolean类型的一个要注意的问题
- 一个关于c/c++语言内存数据类型的实验
- 关于一个c语言中的小陷阱(数据类型之间的转换)
- java语言中float和double类型的数据在编程时的注意事项
- 关于基本数据类型转换的一个小问题
- 学点 C 语言(16): 数据类型 - 关于常量的前缀、后缀
- 关于数据库中varchar/nvarchar类型数据的获取注意事项
- 一个关于数据类型的问题
- 1关于script标签属性,注意点,浏览器文档模式,各种数据类型的转化
- 关于数据类型float&decimal要注意的地方
- 关于C#语言中的问号的一个需要注意的用法
- mahout 0.7关于随机选择数据的一个bug
- 关于Socket通信中多个线程同时向一个服务端口发送数据时的注意点
- 一个关于指针+记录数据类型的使用技巧
- 关于数据类型的一个小问题 (int) (int &) (int ) &
- 一个关于Java数据类型的有趣问题
- 关于C++中数据基础数据类型的一个杂记
- 关于一个数据类型的溢出问题
- Mysq中关于数据类型的注意事项
- 关于数据类型的注意点