运算符与表达式
C语言的各种运算都是在表达式中完成的。表达式是由运算符将各种类型的变量,常量,函数等运算对象 按一定的语法规则连接而成的式子,它描述了一个具体的运算过程。
运算符的优先级和结核性
优先级:即在执行表达式时,各运算运行的先后顺序
结核性:即同一优先级运算的方向
算术运算符和算术表达式
算数运算符
++ 自加 优先级2 -- 自减 优先级 2 右结合性 - 负号 优先级2 * 乘号 优先级3 / 除号 优先级3 左结合性 % 求余 优先级三 + 加号 优先级4 左结合性 - 减号 优先级4
说明:求余运算的数据必须都是整形数据,且余数的符号与只分子的符号一致
算术表达式
1.由算术运算符,括弧,内部函数以及数据组成的式子
2.算术表达式中不能出现C语言字符集意外的字符
3.没有乘方运算符,要计算a的三次方,aaa或pow(a,3)
赋值表达式和赋值运算符
简单的赋值运算符记为“=”,用=连接的式子称为赋值表达式 赋值:
实型赋值整型,舍弃小数部分 整型赋值实型,整数部分不变,增加小数部分
字符型赋值整型,由于字符型为一个字节,而整型位两个字节,故将字符型的ASCLL的码 放到整型的后八位中,前八位位0 整型赋值字符型,会出现数据流失
复合算数赋值
+=
-+
*=
/=
优先级14 右结合性
关系运算符与逻辑运算符
关系运算符
< 小于 <= 小于或等于 6级 左结合性 > 大于 >= 大于或等于 == 等于 七级 左结合性 != 不等于
关系表达式的值是“真”和“假”,用“1”和“0”表示
逻辑运算符和逻辑表达式
逻辑运算符
! 逻辑取反,操作数为0,结果为1;操作数为1,结果为0 2级 右结合性 && 逻辑与,两操作数都为非0时,结果为1,否则为0; 11级 左结合性 || 逻辑或,当两操作数都为0时,结果为0;其他情况都去1 12级 左结合性
逻辑表达式具有短路特性
逗号运算符(优先级最低)
“,不仅是一个分隔符还是一个表达式
表达式1,表达式2,表达式3,…表达式n
其求值过程是从左到右以此计算表达式1,2,3…n,最好依照表达式n的值作为整个逗号表达式的值
位运算符
一个字节=8位(bit)
位运算符
~ 取反 2级
注意:按位取反是依照补码取反
如:8
二进制: 00001000
补码 : 00001000
按位取反 : 11110111
转换为原码:
转换为反码:10001000
转换为原码:10001001=>10进制-9
负数同理
& 按位与 8级
参与运算的对应位均为1其结果位1,否则为0
按位或
参加运算的两个运算量相对应位中有一个位1,结果位1,否则位0
~按位异或
参加运算的两运算量相异时为1,反之为0
<<左移运算
把”<<“左边的运算数的各二进制位全部左移,由”<<“右边的数指定移动的位数,并且高位丢弃,低位补0
>>右移运算
把”>>‘左边的二进制全部右移,由“>>”右边的数字指定移动的位数。对于有符号位,右移时,符号位将随之移动。当为正数时,最高位补零。当为负数,最高位补0或补1取决于编译系统的规定
复合运算符
&=
<<=
>>=
|=
^=