数值(文字常量),整数,浮点数,字符,字符串,布尔变量,枚举类型,数组这些基本数据类型的使用注意事项:

(一)数值
(1)避免使用"神秘数值".
神秘数值是程序中出现的,没有经过解释的数值文字常量,如100,122。
可以用定义常量和全局变量的方法来代替神秘数值。
例如:
#define MAX 100
const int MAX = 100;
(2)预防除零错误
在除法的时候要考虑表达式的分母是否有可能为0。

(二)整数
(1)检查整数除法
例如:
7/10他不等于0.7,而是0,或者等于负无穷大。
在现实世界里10*(7/10) = (10*7)/10 = 7,但在整数运算中却不同。10*(7/10) = 0。
(2)整数溢出
在做整数乘法和加法的时候容易出现这种情况。
避免整数溢出的最简单方法是考虑算术表达式中的每个项,设想每个项的最大值,预料出结果。
(3)中间结果溢出
例如:
int a = 1000000;
int b = 1000000;
int product = a * b / 1000000;
结果是product = -727;是不是跟预想的结果不一样。问题是出现在a * b这里,a * b的结果就已经大于了整数的最大取值范围。

(三)浮点数
(1)避免相差很大的两个浮点数相加减
例如:
1000000.00 + 0.1 可能等于的是1000000.00,因为32位不能给你足够的有效位数包容1000000和0.1之间的数值区间。
(2)避免等量判断
很多应该相等的浮点数值并不一定相等。
例如:
C#代码
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            double nominal = 1.0;
            double sum = 0.0;

for (int i = 0; i < 10; i++)
            {
                sum += 0.1;
            }

if (nominal == sum)
            {
                Console.WriteLine("same");
            }
            else
            {
                Console.WriteLine("differnt");
            }
        }
    }
}
这段程序的结果是different。
(3)舍入误差问题
解决方案:
1.使用精确度更高的变量类型。
2.换用二进制编码的十进制变量。
3.把浮点变量变成整型变量。

(四)字符和字符串
(1)不要使用神秘字符和字符串。
(2)访问字符串时避免溢出。
(3)知道你的语言和开发环境如何支持Unicode.

(五)布尔变量

(1)用布尔变量对程序加以文档说明
例如:

if ((elementIndex < 0) || (MAX_ELEMENTS < elementIndex) || (elementIndex == lastElementIndex))
{.....}

这段代码布尔判断目的不明确,如果该成下面这样就比较明确了。

bool finished = (elementIndex < 0) || (MAX_ELEMENTS < elementIndex);
bool repeatedEntry = (elementIndex == lastElementIndex);
if (finished || repeatedEntry ){....}

(六)枚举类型
(1)枚举可以提高可读性。
例如:

if (color == 1)

if (color == Color_red)

相比之下第二条语句可读性就高。

(2)枚举可以提高可靠性。
使用枚举使编译器执行很严格的类型检查。
例如:
    enum Color
    {
        Color_red,
        Color_blue,
        Color_black,
    };
声明了一个枚举类型Color,如果声明了一个Color类型的变量c,编译器只能允许Color_red,Color_blue,Color_black这3个值付给c。
(3)枚举可以简化修改。
就拿上边的Color来说吧,如果以后程序想添加一些颜色只需往列表中增加元素即可,编译以后就可以运行了。

(七)数组
(1)确认所有数组下标都没有超出数组的边界。
(2)如果数组是多维的,确认下标使用顺序的正确的。
(3)提防下标串换串话。
这种情况出现在使用嵌套循环的时候,不要把Array[i]写成Array[j]。

以上是我看过资料自己整理出来的结果,如有不对希望大家指出来。如果不全请大家跟贴补充上来。

转载于:https://www.cnblogs.com/spnider/archive/2006/07/25/459262.html

基本数据类型使用注意事项相关推荐

  1. switch支持的10种数据类型和注意事项

    文章目录 switch支持的数据类型[切记不支持long.double.float及其包装类型] switch注意事项 switch支持的数据类型[切记不支持long.double.float及其包装 ...

  2. Python基本数据类型的注意事项

    Python的数据类型主要有如下9种: bool:布尔型,True/False int:整数型,-1,0,1,2,3... float:浮点型,0.01,3.14,-2.234 complex:复数型 ...

  3. 倍福PLC的C++ ADS通讯定义数据类型时注意事项

    在C++程序与倍福PLC通过ADS通讯时,如果C++程序中定义的变量与PLC程序中相应变量定义的数据类型不对应时,可能会出现数据读取或者写入错误,以下为调试过程中容易出错的实践总结记录. 1.向PLC ...

  4. Go 变量及基本数据类型3

    #### Go 变量及基本数据类型(三)今天学习一下剩下的两个基本数据类型(布尔类型,字符串类型)以及基本数据类型的相互转换##### 布尔类型布尔类型也称为bool 类型, bool 类型只允许取值 ...

  5. Golang基本数据类型的相互转换

    基本数据类型的相互转换 基本介绍 Golang 和 java / c 不同,Go 在不同类型的变量之间赋值时需要显式转换.也就是说 Golang 中数 据类型不能自动转换. 基本语法 表达式 T(v) ...

  6. 【c语言学习概述-基本数据类型】

    各大编程语言的主要用途 C/C++ C++ 是在C语言的基础上发展起来的,C++ 包含了C语言的所有内容,C语言是C++的一个部分,它们往往混合在一起使用,所以统称为 C/C++.C/C++主要用于P ...

  7. 会汇编语言再学c语言,只有C语言功底的我学习汇编语言可以吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 第一讲 单片机的基础架构及基本外围电路 1   单片机的内部基本组成 2   单片机的管脚及其各管脚的功能 3   晶体振荡器电路及复位电路 4   电平 ...

  8. sql数据表改为自动递增显示与其他表关联_MySQL萌新第一季 第四话-数据表的基本操作...

    本话旨在完成以下内容: 在数据库中,数据表是数据库中最重要和基本的操作对象,是数据存储的基本单位.换句话说我们操作数据库其实重要的就是操作数据表.本章将详细介绍数据表的基本操作,主要内容包括:创建数据 ...

  9. python的JSON模块和OS模块

    JSON全名是JavaScript Object Notation(即:JavaScript对象标记) 它是JavaScript的子集. 前端和后端进行数据交互,其实就是JS和Python进行数据交互 ...

最新文章

  1. python 读取excel 表格的数据
  2. 参加维基链超级节点竞选有什么好处呢?
  3. 9点到17点半 cron_SpringQuartz定时任务的cron表达式书写
  4. python逆转字符串封装_Python 实现文本操作之逆转字符串
  5. 迷宫python_Python走迷宫,递归 - nixBlog
  6. github网址无法访问怎么办?
  7. Java 数字相关操作通用类 NumberUtils.java
  8. 富文本_轻量级 web 富文本编辑器 —— wangEditor
  9. 程序员们怎么过端午?你属于哪一款?
  10. 本地jupyter notebook远程连接服务器
  11. nginx+keepalived构建主备负载均衡代理服务器
  12. JavaScript中的this详解
  13. Google 开通免费主机服务,如果你有email帐户,你就可以注册,目前最多只能存放40页面...
  14. 基于等分线性回归方法的城乡收入差距因素比较分析——以广东省为例
  15. autofs后 卸载_nfs挂载无法卸载
  16. ubuntu 安装和删除字体
  17. 网易企业邮箱服务器没有响应,网易邮箱企业邮箱无法收发信是怎么回事
  18. 解密android日志xlog,mars的xlog日志文件解析以及日志查看工具介绍
  19. JavaScript中的表格:文本域
  20. 矩阵旋转(逆时针九十度

热门文章

  1. python多进程断点续传分片下载器
  2. android 定位的几种方式介绍
  3. 软件工程——理论、方法与实践③
  4. 云计算背后的秘密(6)-NoSQL数据库的综述
  5. 学习jQuery(一),做的第一个可拖动列的Grid
  6. 如何访问MATLAB Builder for .NET Components
  7. Linux 内核里的“智能指针”
  8. js组合模式和寄生组合模式的区别研究
  9. Dropbox 的用户付费账户降级策略
  10. 理解、学习与使用Java中的Optional