第5章操作符和表达式

c提供了所有你希望编程语言拥有的操作符。它甚至提供了一些意想不到的操作符。
5.1操作符
按照操作符的功能和他们的使用方式对它们进行分类,按照优先级对他们进行分组。

5.1.1算术运算符
-+ - * / % 除了%操作符外,其余几个操作符既适用于浮点类型又适用于整数类型。

5.1.2移位操作符
无符号值执行的所有移位都是逻辑移位,有符号数执行的是逻辑移位还是算术移位由编译器决定。
算术左移和逻辑左移是相同的,它们只有右移时不一样,而且是操作数是负数时才不一样。
一个程序中如果使用了有符号数的右移操作它是不可移植的。
5.1.3位操作符
位的操纵:把指定的位置一
value = value | 1 << bit_num;
把指定的位清零
value = value & ~( 1 << bit_num );
测试某个位,如果改位被置一,则表达式返回非零值
value & 1 << bitnum;
5.1.4赋值操作符
赋值是表达式的一种,而不是某种类型的语句。
复合赋值操作符
5.1.5单目操作符
前缀和后缀形式的增值操作符都复制一份变量值的拷贝,用于周围表达式的值正是这份拷贝,前缀操作符在进行复制之前增加变量的值,后缀操作符在进行复制之后才增加变量的值。这些操作符的结果不是被它们所修改的变量,而是变量值的拷贝。
5.1.6关系操作符
这些操作符产生的结果都是一个整形值,而不是布尔值,如果两端的表达式符合操作符指定的关系,表达式的结果就是1,不符合就是0,关系操作符的结果是整形值所以它可以赋值给整形变量。通常用于if或while里面用于测值表达式。表达式的结果如果为0就被认为是假,表达式的结果为任何非零值就被认为是真。c用整形表示布尔型值。
5.1.7逻辑操作符
具有短路求值,首先对左操作数求值,如果左操作数能确定整个表达式的结果,则不在对右操作数求值。
5.1.8条件操作符
条件操作符的优先级非常低。
5.1.9逗号操作符
5.1.10下标引用函数调用和结构成员
下标引用操作符是一对方括号,下标引用操作符接受两个操作数:一个数组名一个索引值。
5.2布尔值
c并不具备显示的布尔值类型,所以使用整数来代替,其规则是零是假,任何非零值皆为真。
尽管所有的非零值都被认为是真,但是当你在两个真值之间比较时,必须小心,因为不同的值都可能代表真。避免混合使用整形值和布尔值。如果一个变量包含了一个任意一个整形值,应该显示的对它进行测试。if(value ! =0 )不要使用简写法来测试变量是零值还是非零值。因为这类形式错误的暗示改变量在本质上是布尔类型的。
如果一个变量用于表示布尔值,应该始终擦它设置为0或者1.
5.3左值和右值
左值:就是那些能出现在赋值符号左边的东西。
右值:就是那些能出现在赋值符号右边的东西。
间接访问和下标引用操作符,它的结果是个左值。其余操作符的结果则是个右值。
左值意味着一个位置右值意味着一个值,使用右值的地方可以使用左值,使用左值的地方不能使用右值。
5.4表达式求值
表达式的求值顺序一部分是由它所包含的操作符和优先级决定。同样有些表达式的操作数在求值过程中可能需要转换为其他类型。
5.4.1隐式类型转换
整形提升
5.4.2算术转换
寻常算术转换
当float型转换为整形时,小数部分被舍弃,并不是四舍五入。
5.4.3操作符的属性
复杂表达式的求值由三个因素决定:操作符优先级,操作符结合性以及操作符是否控制执行的顺序。
5.4.4优先级和求值的顺序
优先级只对相邻操作符的执行顺序起作用。
-表达式中操作符的优先级只决定表达式的各个组成部分在求值过程中如何进行聚组。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值