第七章                         
其它运算符

 

逗号运算符

逗号运算符:即顺序点,逗号前先运行。后再运行。

for循环的运行次数:

for(i=n; i<m; ++i) //for循环共运行了m-n次。当m-n<0时,即for循环一次也不运行。

for(i=n; i<m; i+=k)//for循环共运行了(m-n)/k次,当有小数时。向前进1。当m-n<0时,即       
for循环一次也不             
运行。

三目(元)运算符

格式:A ? B : C;

                  
由三部分组成,由问号?和冒号:隔开,A成立。运行B。A不成立,则运行C。

等价于:

if(A)

B;

else

C;

自增运算符

前自增:++i 
(i加1后的值,即i+1)

后自增:i++
(i加1前的值。即i)

前自减:--i 
(i减1后的值,即i-1)

后自减:i--
(i减1前的值。即i)

注意:

        
1、编程时应该尽量屏蔽掉前自增(减)和后自增(减)的差别;

        
2、i++
和 ++i
应该单独成一个语句。不要把它作为一个完整复合语句的一部分来使用

如:

intm = i++ + ++i + i + i++; 
//这样写不可是不规范的代码,并且是不可移植的代码

或 printf("%d
%d %d", i++, ++i,i); 
//这样写不可是不规范的代码。并且是不可移植的代码

即在 int m = i++ + ++i + i + i++;中,i的值是否添加,在i++与++i中是否已经改变是不清楚的。

有关顺序点的问题

顺序点:逗号:,
括号:(表达式)
分号:;

加号+不是顺序点。不知其i++是否已经计算生效

# include <stdio.h>

int main(void)

{

inti, j, k, m;

i= j = 3;

k= ++i; //计算后i = i + 1,即结果i值加1,

m= j++; //计算后j = j + 1,即结果j值加1,

printf("i= %d, j = %d, k = %d, m = %d\n", i, j, k, m);

return0;

}

/*

结果:

i= 4, j = 4, k = 4, m = 3

Pressany key to continue

总结:

前自增与后自增

同样处:都是使i与j的值加1。即i
= i + 1, j = j + 1;

不同处:前自增总体表达式的值是i加1之后的值,即先计算
++,值为i+1;

后自增总体表达式的值是i加1之前的值。即值为i;

*/

 

位运算符

& -- 按位与   
(&& --
逻辑与。也叫而且)

k= i & j; //表示将两个数的二进制代码相应的每一位都进行与操作

运算法则:

1&1= 1

0&1= 0

1&0= 0

0&0= 0 //每一位与1相与还为原数,与0相与全为0,可依此来推断一个数据每一位的数字。

| -- 按位或    
(|| --
逻辑或,也叫或者)

k= i|j; //表示将两个数的二进制代码相应的每一位都进行或操作

运算法则:

1|1= 1

1|0= 1

0|1= 1

0|0= 0 // 仅仅有当两位全为0时结果才为0。

~ -- 按位取反

~i表示把i的变量的所有二进制代码所有取反(包含用于补齐的0或1)。

^ -- 按位异或

运算法则:同样为0,不同为1

1^1= 0

1^0= 1

0^1= 1

0^0= 0

<< -- 按位左移

即将有效数字位左移。左移n位相当于乘2的n次方。

(二进制即乘2的n次方,十进制就是乘10的n次方。如小数点的移动)

i<<3表示把i的二进制代码左移3位,右边补0。

面试题:

A:i = i*8;

B:i = i<<3;

请问上述两个语句,哪个语句的运行速度快?

答案:B快。
由于A语句要动用硬件的乘法器进行乘法运算,B仅用位运算器就可以。

>> -- 按位右移

即将有效数字位右移,右移n位相当于除以2的n次方。进行位运算前提是数据不能丢失。

                  
i>>3表示把i的二进制代码右移3位,左边正数补0,负数补1。

位运算的意义:通过位运算符我们能够对数据的操作精确到每一位,若不用位运算仅仅能精确到字节。

最新文章

  1. 在编译php事务时候出现如下错误,具体原因不知,不过解决了
  2. mysql查询缓存参数
  3. (转)实例分析:MySQL优化经验
  4. iOS 学习 - 6.Objective-C中的各种遍历(迭代)方式
  5. double-clicking
  6. jquery.cookie.js 配置
  7. 高级UIKit-08(TCPSocket)
  8. MVVM Light须要注意的10个问题
  9. [BZOJ1385] [Baltic2000] Division expression (数学)
  10. 表单时间和定时器this的指向
  11. 测试那些事儿—selenium自动化实战之登录验证码处理
  12. 【387】Python format 格式化函数
  13. 总结一下最近用到的技术(2)--JsonSchema和JsonSchemaValidator
  14. 常用工具说明--node.js是什么
  15. 解决python2和python3的pip冲突
  16. vscode简洁的代码编辑器
  17. Leetcode 88 合并两个有序数组 Python
  18. DDL-数据类型
  19. (四)伪分布式下jdk1.6+Hadoop1.2.1+HBase0.94+Eclipse下运行wordCount例子
  20. 使用JAX-WS(JWS)发布WebService(二)

热门文章

  1. 离别在须臾——AFO
  2. WC 2018/CTSC 2018/APIO 2018 游记
  3. Eclipse使用Debug模式调试Spring Boot项目时跳转到exitCurrentThread的问题
  4. 【mybatis】in查询+判断list查询条件是否进行in查询
  5. UVa 1218 - Perfect Service
  6. selenium 截图
  7. ElastcSearch的Mapping映射建立
  8. 9. 使用JdbcTemplate【从零开始学Spring Boot】
  9. Windows无法删除文件 提示找不到该项目怎么办
  10. Python魔法师