目前我在学习C Primer Plus (第六版) 中文版。正好有在学的。可以一起交流。
一、各种各样的问题
在此会列举一些问题,以及我的解决方法。这些解决方法可能会从网上翻找资料。有可能问别人。难免会有问题,望各位前辈指正。也欢迎跟我一样在学习的同学,把你遇到的问题在下方留言,我会整理到这篇文章中。前人栽树后人乘凉。加油坚持!
问题汇总。
1. “5.4.2 语句”中存在这样一段话:
尽管如此,我们还是要提醒读者:声明创建了名称和类型,并为其分配内存位置。注意,声明不是表达式语句。也就是说,如果删除声明后面的分号,剩下的部分不是一个表达式,也没有值:
int port /* 不是表达式,没有值 */
疑问点:没明白这一段话想表达什么意思呢?
2. float double类型
在第五章,5.11编程练习第7题,当时让输入一个double类型的数。我在想,float和double到底有什么区别呢?于是,我开始在网上搜集资料。
链接1:链接: link.
- 范围(链接1)
loat和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:1bit(符号位) 8bits(指数位) 23bits(尾数位)
double:1bit(符号位) 11bits(指数位) 52bits(尾数位)
于是,float的指数范围为-127 ~ > +128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。float的范围为-2^128 > ~ 2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~> +2^1024,也即-1.79E+308 ~ +1.79E+308。
对于类型的分布,可以参考IEEE 754标准。
3. fabs和abs的区别
第六章开头,函数: fabs()
使用fabs()函数(声明在math.h头文件中) 可以方便地比较浮点数,该函数返回一个浮点值的绝对值(即,没有代数符 号的值)。
取绝对值的函数有四个:abs(), fabs(), cabs(), labs();
int abs(int i); //abs的参数为int型,返回值也是int型。i为整型参数。
double fabs(double x); //fabs的参数为double型,返回值也是double型。x为双精度参数。
double cabs(struct complext znum); //cabs的参数为XXX,返回值是XXX。znum为XXX。
long labs(long n); //long的参数为长整型,返回值也是长整型。
4. 构建比较表达式
许多经验丰富的程序员在构建比较是否相等的表达式时,都习惯把常量放在左侧。
5. 运算符的优先级
算术 > 关系 > 赋值
算术 > 关系高优先级组 > 关系低优先级组 > 赋值
关系高优先级组: > , >=, <, <=
关系低优先级组: ==, !=