运算符,表达式
2016-06-17 08:42
267 查看
运算符,表达式
黑色印记
1.运算符i++和++i的区别?首先我们要知道++i是先自加后执行,i++是先执行后自加。所谓的后自加,是指该语句结束标志。C语言中,表示语句结束的有逗号和分号。
光说不练假把式,我们现在开始做几个练习,加深理解。
例: i = 2; 以下表达式分别是等于多少?
<span style="white-space:pre"> </span>(1) i = (++i) + (i++) + (++i) + (i++);
<span style="white-space:pre"> </span>(2) i = (i++) + i + (++i) + (++i);
(3) i = (++i) + (++i) + (i++) + (++i);
解答题目前,我们要知道计算机是以两个数相加计算的。比如,以(1)来说,我们通常是这样计算的,先计算++i,之后计算i++,再计算++i,最后计算i++。因此我们的得到的数据时3+3+4+4=14,之后再自加两次,故(1)的结果是16。但是计算机的计算思路是这样的,先计算++i,再计算i++得到结果6.再和++i计算,得到结果10.最后再和i++计算得到结果14,最后再自加两次,得到结果16。虽然两次的结果是一样的,但我们要知道计算机的计算思路,不能混淆。
以上可知,(2)和(3)的答案分别是12,18。
拓展:i++,++i用在函数的传参。
例: 定义func(int a , int b); i = 2.
<span style="white-space:pre"> </span>(1)func(i++ , i++);
<span style="white-space:pre"> </span>(2)func(i++ , ++i);
<span style="white-space:pre"> </span>(3)func(++i , i++);
<span style="white-space:pre"> </span>(4)func(++i , ++i);
对应的a和b是多少?解决这题前,我们应该先知道以下几点:
1.函数的传参是从右开始的。
2.++i替换成变量名。
3.i++替换成数值。
4.逗号和分号都是结束标志。
比如例(2),从又开始,我们先计算++i,得到i等于3.再计算i++,得到i等于3,于是func(3,i)。最后i自加,得到i = 4.最终func(3,4)。
由上可知,(1) a = 3, b = 2.
(2) a = 3 , b = 4.
(3) a = 4 , b = 2.
(4) a = 4 , b = 4.
综上所诉,相信大家对++i以及i++有了一定的了解了。对于以下这题应该也就很容易了。
i = 2; func (i ++ , i , ++ i , i++,i++ ,i); (i也用变量名替换)
2.&&和|| (短路与和短路或)
对于这个知识点,同学们只要记住以下两句话。
&& 从左往右看,如果有一个为假,右边就不看了,直接退出判断。
|| 从左往右看,如果有一个为真,右边就不看了,直接退出判断。
3.什么时候使用&,什么时候使用|。
按位与运算通常用来对某些位清0或保留某些位。
按位或运算通常用来对某些位置1,其它位不变。
4.右移和左移的区别。
对于无符号的数而言,无论左移还是右移都是以0补位。
但是对于有符号的数而言,两者是有区别的。右移:用符号位补位。左移:用0补位。
5.掩码
掩码主要用来对特定的位进行处理的。
求掩码的公式有:mask = (unsigned int)(pow(2,m+1) - pow(2,n));
6.不使用中间变量,交换两个数的值。
有两种方法。
方法一:<span style="white-space:pre"> </span>a = a ^ b;<span style="white-space:pre"> </span>方法二: a = a +b;
<span style="white-space:pre"> </span>b = a ^ b; <span style="white-space:pre"> </span> b = a - b;
<span style="white-space:pre"> </span>a = a ^ b;<span style="white-space:pre"> </span> a = a - b;
方法二是有缺陷的,因为a+b是有可能溢出的,造成结果错误。但是方法一就不会了。
相关文章推荐
- Lua中关系运算符的使用教程
- Lua学习笔记之运算符和表达式
- C#运算符重载用法实例分析
- sql server 2008中的apply运算符使用方法
- C#中38个常用运算符的优先级的划分和理解
- 讲解C++编程中Address-of运算符&的作用及用法
- 详解C++中的成员访问运算符和指针到成员运算符
- C++中的按位与&、按位与或|、按位异或^运算符详解
- 深入解析C++编程中__alignof 与__uuidof运算符的使用
- 深入解析C++编程中范围解析运算符的作用及使用
- C#基础语法:as 运算符使用实例
- 与MSSQL对比学习MYSQL的心得(五)--运算符
- MySQL中的运算符使用实例展示
- 轻松学习C#的运算符
- Ruby的运算符和语句优先级介绍
- C#编程自学之运算符和表达式
- C# 运算符 ?、??、?: 各种问号的用法和说明
- Lua中的运算符简明总结
- javascript 全等号运算符使用说明
- JS按位非(~)运算符与~~运算符的理解分析