《代码大全2》阅读笔记二——基本数据类型
今天我阅读了《代码大全2》的第十二章——基本整数类型。谈起基本整数类型,我的脑海中就浮现出来整数、浮点数、字符串、布尔变量等这些整数类型,这章主要讲解了这几种整数类型使用时的注意事项。
整数
在使用整数时应注意以下几点:
检查整数除法:对于整数除法来说,7/10不等于0.7,而是等于0。在现实生活中10*(7/10)=7,但是在整数运算的世界中,10*(7/10)=0。%为求余符号,7%10=7.
检查整数溢出:在做整数的相乘或相加时,要注意可能出现的最大整数。允许出现的最大无符号整数经常是2^23-1,有时候是2^16-1.当运算时出现最大整数超过此范围,运算结果会出错。
检查中间结果溢出:进行整数运算过程中,不仅要考虑结果的取值,还要考虑中间过程中的可能取值,如果中间结果超过最大整数,最后结果也会出错。
浮点数
在使用浮点数应该注意的几点:
避免数量级相差巨大的数之间的加减运算:32位的浮点数变量,10000000.00+0.1的最终结果可能会得到10000000.00,在实际生活中会遇到数量级相差过大的数据相加。如何解决这种现象?书上给了一种解决方案:将数据进行排序,从小到大以此相加。
避免等量判断:很多应该相等的浮点数值并不一定相等,举例来说10个0.1相加很少会等于1.0 。对于这种现象也有对应的解决方法:寻找一个可以接受的精准度范围,通过布尔函数进行判断数值是否符合即可。
double judgeCount=0.001 boolean equals(double count1,double count2) { if(Math.abs(count1-count2)<judgeCount) { return true; } else{ return false; }
处理舍入误差问题:由于舍入导致的误差也可用第二种方法解决,也可用以下几种方法:
换一种精确度更高的变量类型
换用二进制编码的十进制变量
把浮点变量变成整型变量
字符和字符串
字符串里面主要指出要避免使用神秘字符和神秘哦字符串,神秘字符是指程序中随处可见的字面形式表示的字符(A),神秘字符串是指字面形式表示的字符串。
在C语言中 要注意字符串指针和字符数组之间的差异:警惕任何包含字符串和等号的表达式,StringPtr=" Some Text S tring" 这种形式只是让StringPtr指针指向该字面字符串,并没有将内容拷贝
用null初始化字符串以避免无结束符的字符串
布尔变量
使用布尔变量对程序加以文档说明:将表达式结果赋给一个变量,从而使这一判断更明显
x=((a>b)||(c>b)) y=(a>c) if(x&&y) { ... }
用布尔变量来简化复杂的判断:如果出现数量较多的判断条件时,将表达式结果赋给不同的变量,然后通过判断变量来比较结果
枚举类型
当程序中出现多个重复一样的取值时,可以建立枚举类型来提高代码阅读性,当需要修改数值时,方便进行修改,
数组
数组注意点:
确认所有的数组下标都没有超出数组的边界:数组成员不可以越界
考虑用容器来取代数组,或者将数组作为顺序化结构来处理:数组适合顺序访问,若要采取随机访问则应先考虑,集合、栈、队列等结构来代替数组
检查数组边界点:使用数组存取元素时,一定要考虑好下标,比如说数组a[0]取的是第一个元素。
如果数组是多维的,确认下标的使用顺序是正确的:二维数组a[i][j],注意区分i和j
创建自己的类型