运算符,表达式

来源:互联网 发布:程序员经常加班吗 编辑:程序博客网 时间:2024/06/10 02:58

                                      运算符,表达式                                                                                                                                                                          黑色印记

    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是有可能溢出的,造成结果错误。但是方法一就不会了。



0 0