《代码大全》学习笔记之— 基本数据类型(1)

《代码大全》,如果还没有看过书中的内容,单听书名,或许你会以为这是一本满是源代码的大块头计算机书籍。当你打开书本,粗略翻看里面的内容之后,你就会觉得书名与书中的内容似乎有些“牛头不对马嘴,风马牛不相及”。的确,此书的原名:《Code Complete》,英语不错的朋友可能一看就会觉得书名的翻译有问题。Code Complete,字面意思:编码完成,怎么也无法与代码大全挂上钩。先别急,再仔细研读书中的内容,你就会明白作者的本意了。本书有一个贯穿全书的重要理念:代码的编写过程其实就是软件构建的过程,代码的好坏直接由软件构件技术来决定。所以,本书主要是围绕软件构建中运用到各种技术展开的,比如:如何做需求,如何做架构,如何写出高质量的代码,如果使用和定义变量,如何做测试等等。这样以来,用《代码大全》作本书书名,似乎也没有什么不妥了。

        一直觉得“授人以鱼不如授人以渔”,而本书正是一本“授人以码(代码)不如授人以码(编码)”的计算机书籍。与那些“xxx天速成xx”的书籍相比,本书强调的是方法,思想,而不是具体的实现工具和代码。虽然,菜鸟级别的我,对书中的一些内容暂时还看不太明白,或者说感悟还不是那么深刻,但是,我能够看明白的章节,比如:12章,基本数据类型,看完之后,收获不浅。对其中的一些经验之谈深有同感,比如:“杰出的程序员会修改他们的代码来消除所有的编译器警告,通过编译器警告来发现问题要比你自己找容易得到”,“使用规则有助于减少脑力消耗以及编程失误”。。。。。。

        下面就12章基本数据类型,写写自己的学习笔记。

基本数据类型

从大一学习C语言,到大二学习C++,数据结构,编程语言中用到数据类型无外乎就是这么几种:

1.        整形

2.        浮点型

3.        字符型

4.        字符串

5.        布尔变量

6.        枚举类型

7.        结构体

8.        类

其中,整形,浮点型,字符型是三种最基本的数据类型。其它所有类型都只不过是其衍生物。具体来说:

l  在实际应用中,整形数是与符号结合起来用的,而且受其可以表示的数值范围大小的限制。因此,整形,又细分为:

1)        无符号短整形: unsigned short int,可简写为:unsigned short;

2)        符号短整形  : signed shortint, 可简写为: shortint;最简单的形式:short;

3)        无符号整形  : unsigned int    

4)        符号整形    : signed int ,一般简写为:int。      

5)        无符号长整形: unsigned long int;可简写为:unsigned long

6)        符号长整形:   signed long int,一般简写为:long。

布尔变量和枚举类型,其实只不过是整形数的衍生物,其本质都是整形数。

l  浮点型,分为:

1)        单精度:float

2)        双精度:double

字符型,可衍生为字符串。

基本数据类型的使用规则

         无论是typedef定义的别名,struct定义的结构体,还是class定义的类,其数据单位都是上面这几个基本数据类型。因此,明确了这些基本数据类型的使用规则,可以在编写代码中少犯错误。

数值

规则1:代码中避免使用神秘数值;

神秘数值,即没有明确含义的单纯数字(书上的说法:在程序中出现,没有经过解释的数值文字量)。比如:10,在不同的应用,它可能代表不同的含义:可以是10进制数,可以是10月等等。

规则1的好处:

1)        程序可维护性强,修改起来更容易,而且不易出错。一改全改,不会存在漏网之鱼。

2)        程序可读性好,顾名思义,程序含义显而易见。

规则1的实行方法:使用具名常量,即使用 #define或者 const 定义常量。

比如:

#define PI3.1415926

const float PI=3.1415926;

特例:如果需要,可以使用硬编码的01,用于增量、减量和数组的第一个元素下标。比如下面这两种情况是可以接受的:

         for month = 1  to  NUM_MONTHS_IN YEAR

       month= month + 1

规则2:代码考虑除零错误;

代码中使用除法时,一定要注意:分母不能为0的问题。

规则2的实行方法:写防除零代码;

规则3使用显示地强制类型转换;   

       如果不显示地进行类型转换,则编译器会自动按照默认方式进行转换,但是不同编译器执行的转换并不相同,容易造成错误。

规则4避免混合类型的比较;

         浮点数,最好不要进行任何比较操作。比如:

         floatterm1;

int term2;

         对term1,term2进行比较

最好不要写成:if ( term1  <  term2)

可以写成:    if ( ( term1 – (float)term2) < ACCEPTABLE_DELTA),

其中 ACCEPTABLE_DELTA定义如下: double ACCEPTABLE_DELTA= 0.00001;

规则4:注意编译器的警告信息;   

       很多程序员都曾被请去帮助别人解决某个讨厌的错误,结果却发现编译器一直都在对这个错误发出警告。杰出的程序员会修改他们的代码来消除所有的编译器警告,通过编译器警告来发现问题要比你自己找容易得多。

整数

规则1:检查整数除法;(区别于整数除零规则)

         举例:当使用整数时,7/10不等于0.7,它等于0,或者负无穷大,或者等于最接近的整数。这样一来,10*(7/10)不一定等于(10*7)/10,在整数运算中,前者等于0,后者等于7。解决这类问题的办法:重新安排表达式的顺序,最后执行除法。

规则2:检查整数溢出;

         在计算机中,整数的表示是有范围限制的,选择数据类型时要考虑到这个问题。这里值得注意的是,需要考虑的不仅是一个算式的最后值,而且要考虑到中间结果。

         解决整数溢出的一种方法:使用长整型或者浮点型。

浮点数

         规则1:避免对数量级相差巨大的数字做加减运算;

         32位浮点变量,1000000.00+0.1可能会得到1000000.00,因为32位不能给你足够的有效位数包容1000000和0.1之间的数值区间。      

         规则2:避免等量判断;

一种有效的方法:先确定可接受的精度范围,然后用布尔函数判断数值是否足够接近。

         比如:if ( (term1 – term2) < ACCEPTABLE_DELTA )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值