C学习笔记(七)运算符与表达式
2016-07-16 10:15
337 查看
1. 算术运算符——自增,自减运算符
例1
解析:运算符的结束标志:分号;逗号,函数括号()
例2
结果:num = 19; i = 6;
解析:先算左边两表达式的值 num = 4+4+5+6
例3
2.关系运算符
> < == >= <=
注意:常量写在左边 if(6 == num)
3.逻辑运算符
与&& 或|| 非!
短路与 短路或
4.位操作运算符
(1)按位与运算及应用
&,双目运算符,其功能是参与运算的两个数字对应的二进制位相与,只有对应的二进位均为1时,结果位才为1,否则为0,参与运算的数已补码方式出现
应用:清零特定位:掩码mask中特定位置0
取某数特定位:掩码mask中特定位置1
例 保留 m ~n位
有符号数:左移0补位 ,右移符号位补位
无符号数:左/右 0 补位
(2)按位或运算及应用
应用:某些位置1,其他位不变
(3)按位异或运算及应用
应用:使特定位取反
不引入第三变量,交换a,b
方法一:
(4) C语言性能优化:使用位操作
例1
int num ; int i = 2; num = (i++) + (i++)+ (i++) + (i++) ;结果:num = 6; i = 6;
解析:运算符的结束标志:分号;逗号,函数括号()
例2
int num; int i = 2; num = (++i) + (++i) +(++i) +(++i);
结果:num = 19; i = 6;
解析:先算左边两表达式的值 num = 4+4+5+6
例3
int i = 2; func(i++,++i); // <span style="font-family: Arial, Helvetica, sans-serif;">func(3,2)</span>
int i = 2; func(++i,++i,i++,++i,i++); //func(7,7,4,7,2)
int i = 2; func(i++,++i,i,i++,++i); //func(5,6,6,3,6)解析:++i被替换为变量名,i++被替换成数值,变量仍是变量
2.关系运算符
> < == >= <=
注意:常量写在左边 if(6 == num)
3.逻辑运算符
与&& 或|| 非!
短路与 短路或
4.位操作运算符
(1)按位与运算及应用
&,双目运算符,其功能是参与运算的两个数字对应的二进制位相与,只有对应的二进位均为1时,结果位才为1,否则为0,参与运算的数已补码方式出现
应用:清零特定位:掩码mask中特定位置0
取某数特定位:掩码mask中特定位置1
例 保留 m ~n位
unsigned int mask = (unsigned int)(((~(unsigned int)0) >> (32 - (n - m +1))) << m )</span>
有符号数:左移0补位 ,右移符号位补位
无符号数:左/右 0 补位
(2)按位或运算及应用
应用:某些位置1,其他位不变
(3)按位异或运算及应用
应用:使特定位取反
不引入第三变量,交换a,b
方法一:
a = a ^ b; b = a ^ b; a = a ^ b;方法二:(当a,b为大数时,易溢出)
a = a + b; b = a - b; a = a - b;方法三:(除数不能为0)
a = a * b; b = a / b; a = a / b;
(4) C语言性能优化:使用位操作
相关文章推荐
- 使用onclick跳转到指定页面的方法
- 设置并删除Dreamweaver自动生成的_notes文件夹
- J2EE基础之Servlet
- 系统架构师谈企业应用架构之业务逻辑层
- 对epoll总结
- ruby 数据sql操作ActiveRecord
- nyoj 14 会场安排问题
- PHP定时备份MySQL,mysqldump语法大全
- Caffe中的优化方法
- OPENCV3.0 双目立体标定
- php 过滤特殊字符串函数
- 求前缀表达式转后缀表达式的方法(pascal)
- session入redis 操作
- 移动云平台的基础架构之旅(一):云应用
- Effective STL条款
- UDP打洞原理及软件简单实现
- nginx+tomcat+redis完成session共享
- 虚拟机拷贝之后,发现系统内的开机自启动的nginx,不能自启动了
- 调试记录(一)pixhawk参数设置的问题
- 在首席架构师手里,应用架构如此设计