C Primer Plus chapter 5 运算符表达式语句

C Primer Plus chapter 5 运算符表达式语句

运算符

=(c语言可以三重赋值) + - * / (整数除法有截断,负数除法也直接舍弃小数部分)几个基础运算符的优先级和结合性
一元时的±是从右往左结合
**当符号的优先级相同时,再看结合律。结合律只适用于共享同一运算对象运算符。**例如,在表达式12 / 3 2中,/和运算符的优先级相同,共享运算对象3。因此,从左往右的结合律在这种情况起作用。表达式简化为4 * 2,即8(如果从右往左计算,会得到12/6,即2,这种情况下计算的先后顺序会影响最终的计算结果)。

c利用头文件系统使用typedef将size_t作为 unsigne int 和 unsigned long的别名。(如typedef double real;则real就变成了double的别名)

%为求模运算符,负数求模:如果第一个对象为负数,则求模的结果也是负数,如果第一个运算对象为正数,那么求模的结果也是正数。
11 / 5得2,11 % 5得1
11 / -5得-2,11 % -2得1
-11 / -5得2,-11 % -5得-1
-11 / 5得-2,-11 % 5得-1
实际上,求模也可以这样计算:实际上,标准规定:无论何种情况,只要a和b都是整数值,便可通过a -(a/b)*b来计算a%b。

++ – 对于自加和自减运算,尽量少在表达式中使用。因为前缀法和后缀法会识结果不同,更主要的是,如a=n+++n++,如何计算取决于编译器,这是c标准未定义的情况。
遵循以下规则,很容易避免类似的问题:
如果一个变量出现在一个函数的多个参数中,不要该变量使用递增或递减运算符;
如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减运算符。

表达式和语句

表达式由运算符和运算对象组成。每个表达式都有一个值。
语句是c程序的基本构件快。一条语句相当于一条完整的计算机指令。大部分语句都由分号结尾。语句可以调用函数或者改变值。注意,声明不是表达式语句。
复合语句也称为块。

类型转换

1.当出现在表达式中时,有符号和无符号的char和short都会被转换为int。在K&R那时的C中,float会被自动转换成double(目前的C不是这样)。由于都是从较小类型转换为较大类型,所以这些转换被称为升级(promotion)。
2涉及及两种类型的运算,两个值会被分别转换成两种类型的更高级别。
3.类型的级别从高至低依次是long double、double、 float、unsigned long long、long long、unsigned long、long、unsigned int、int。例外的情况是,当long 和 int 的大小相同时,unsigned int比long的级别高。之所以short和char类型没有列出,是因为它们已经被升级到int或unsigned int。(浮点大于整型,无符号大于有符号型,字节大的大于字节小的)
4.在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。这个过程可能导致类型升级或降级(demotion)。所谓降级,是指把一种类型转换成更低级别的类型。
5.当作为函数参数传递时,char和short被转换成int,float被转换成double(这里才有float转变为double)。第9章将介绍,函数原型会覆盖自动升级。
如果待转换的值与目标类型不匹配怎么办?这取决于转换涉及的类型。待赋值的值与目标类型不匹配时,规则如下。
1.目标类型是无符号整型,且待赋的值是整数时,额外的位将被忽略。
例如,如果目标类型是 8 位unsigned char,待赋的值是原始值求模256。
2.如果目标类型是一个有符号整型,且待赋的值是整数,结果因实现而异。
3.如果目标类型是一个整型,且待赋的值是浮点数,该行为是未定义的。
如果把一个浮点值转换成整数类型会怎样?当浮点类型被降级为整数类型时,原来的浮点值会被截断。例如,23.12和23.99都会被截断为23,-23.5会被截断为-23。

以上为自动类型转换,以下则为强制类型转换。
形式为
(type) number
即可转换为想要的类型
int mice; mice = (int) 1.6 +(int) 1.7;

另外

本章写练习题的时候发现有两个不太会的小方法
链接:日常代码随记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值