文章目录
- 一、算术运算符
- 1.+、-、*
- 2. 除(/)
- 3.取模(%)
- 4.指数运算(pow函数)
- 二、自增自减运算符
- 三、关系运算符
- 四、逻辑运算符
- 五、位运算符
- 1.左移(<<)
- 2.右移(>>)
- 3.取反(~)
- 4.按位与(&)
- 5.按位或
- 6.异或
- 六、其他运算符
- 七、运算符优先级
- 总结
一、算术运算符 1.+、-、*
与数学运算相同2. 除(/)
两个浮点数相除,结果为双精度浮点数; 两个整数相除,结果为整数,舍弃小数部分 只要除数或被除数中有一个负号,结果就是负数(即同号得正,异号得负) 计算机不能真正用浮点数除以整数,编译器会把两个运算对象转换成相同类型 p94
printf("%fn",7./4.); 1.75
printf("%f", 7. / 4); 1.75
在除法或者取余运算中如果右边的值是0,程序运行时将会出现程序崩溃现象3.取模(%)
取模只能用于整数,不能用于浮点数 负数取模(符号问题):结果和被除数的符号相同 在除法或者取余运算中如果右边的值是0,程序运行时将会出现程序崩溃现象4.指数运算(pow函数)
C语言没有指数运算符,但提供了 一个pow函数
pow(2,3) 结果为8二、自增自减运算符
++i表示,i自增1后再参与其它运算; 而i++ 则是i参与运算后,i的值再自增1三、关系运算符
关系运算符的运算结果只能是“真”或“假”,真的值都为1,假的值都为0四、逻辑运算符
逻辑运算符的运算结果也只能是“真”或“假”,真的值都为1,假的值都为0
&&:汇编真实执行时候,先判断左边,如果成立再看右边。左边不成立,就没必要看右边。
||:汇编真实执行时候,先判断左边,如果不成立再看右边,如果左边成立,就没要看右边。
位运算总共有六种符号:左移、右移、取反、位与、位或、异或等,通常左移和右移位运算比乘除法运算要快很多1.左移(<<)
左移运算是将一个二进制位的操作数,按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0
只要是左移n位就是等价于乘以n个2
2.右移(>>)右移运算是将一个二进制位的操作数,按指定移动的位数向右移动。移出位被丢弃,右边移出的空位有可能补0,也有可能补符号位。
只要是右移n位就等价于除以n个2
如果使用无符号变量做右移,移动后高位填充的是0。
有符号变量当在最高位(符号位)是1的时候(也就是当它是负数时),右移运算后的高位填充的是1。
取反运算符~是单目运算符,具有右结合性,其功能是对参与运算的数的各二进位按位取反。所谓取反,就是把每个位上的0变为1、1变为0。4.按位与(&)
按位与运算符"&"是双目运算符,其功能是参与运算的两数各对应的二进位相与。 只有对应的两个二进位同时为1时,结果位才为1。 否则2个对应位,有一方为0按位与的结果就是0。
例如:7&28=4(二进制表达为:0111 & 00011100=0100)。
5.按位或按位或运算符"|"是双目运算符,其功能是参与运算的两个数双方对应的二进制位,只要有一方是1结果位就是1。 否则,只有双方对应位同时为0时,按位或的结果位才是0。
例如:9|5=13(二进制表达为:1001 | 0101=1101)。
异或(英文为exclusive OR,或缩写成xor)是双目运算符,对参与运算的两个数的二进制位比较,相同结果位得0、不同结果位得1。六、其他运算符 七、运算符优先级
a)【逻辑非(!)】>【算术运算符】>【关系运算符】>【逻辑与(&&)】>【逻辑或(||)】高于【赋值运算符】; b) 关系运算符中:前四种(>、<、>=和<=)的优先级高于后两种(==和!=); c) 算术运算符的优先级一般都高于关系运算符,一般是左右两边运算好之后再判断; d) 逻辑与(&&)与逻辑非(||)虽然优先级较低,但并非两端的表达式都先计算完再执行逻辑比较。而是这两种逻辑运算符左端表达式必须先计算,之后右端的表达式有可能计算也有可能不计算。总结



