关于今天小考核的问题的总结

1.常见的运算符里,从右往左的有:=(赋值)、 ++、 --、 ?:、  *、 &、 !、 sizeof等。


顺带解释下从右往左的意思:主要引用自 https://zhidao.baidu.com/question/561922965.html


一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个。

即,相同优先级的运算符连续出现时,应该从右往左算还是从左往右算。


例:

 int a,b=1,c=2; a=b=c;

我们发现,这个表达式只有赋值符,这样优先级就无法帮助我们决定哪个操作先执行,是先执行b=c呢?还是先执行a=b。如果按前者,a=结果为2,如果按后者,a的结果为1。 所有的赋值符(包括复合赋值)都具有右结合性,就是说在表达式中最右边的操作最先执行,然后从右到左依次执行。这样,c先赋值给b,然后b在赋值给a,最终a的值是2.


int a=1, b=3, c=2, d;
d = a>b ? a : c>b ? c : b;
// 根据从右到左的结合顺序,则该表达式等价于d = (a>b ? a : (c>b ? c : b));
// 计算过程:
// 1、先算a>b,结果为0;
// 2、再算(c>b ? c : b),之后算c>b,结果为0,
// 3、所以最后结果为b的值,也即等于3
// 如果是从左到右的结合顺序,那么该表达式等价于d =((a>b ? a : c>b) ? c : b);
//计算过程:
// 1、先算a>b,结果为0;
// 2、再算c>b,结果为0;
// 3、所以d=b,结果为b的值,也即等于3

虽然计算结果相同,但是计算的顺序是完全不同的,正确的应该是从右往左。


还有经典的:while (*des++ = *src++);

*和++优先级相同,但他们都是从右往左的结合性,即他俩连续出现时,应该从右往左看。即,是先 ++,然后 * 。(虽然是先++,但因为此处的 ++是后置++,所以结果还是先解引用的,然后才真正的加1的,但对于计算而言,它处理的顺序确实是先运算后置的++,然后才运算的 *(解引用))


2.浮点数不能进行位操作,会改变第一位的符号位。


3.switch语句的表达式,不能是浮点数,字符串,可以是bool类型、整型等。浮点数不行的原因:浮点数有精度问题,switch内置的判断相等语句就会出错。字符串不行的原因:字符串都是以指针的形式表示,指针的相等不能代表字符串的相等,字符串的比较应该用strcmp函数。


4. 如:4>3,结果为1(并不是非0值,就是1);4<3,结果为0。if(express),express只要是非0(任意不是0的结果都可以,1,5,32)就执行下面的语句。


5.if(express1 || express2),逻辑或运算符||,是从左往右看的,意思是只要express1为真了,就直接得到结论了,不再去执行express2了。


6.bool flg = true;

   for(int i = 0; i < n; i++)                           

    {if(n % i == 0)                                       

      {if(flg)

        { flg = false;                                     

         .....                                                 

         }

         else

         {......

          }

       }

    }

如上,跟#ifndef...#define... ...#endif,一样,如果遇到一些首次只允许出现一次的情况,可以定义一个状态常量(flg),bool类型,首先把flg置为ture,然后开始执行,判断flg是不是真,是真,就把它置为false,然后执行首次语句,如果是假,就跳过首次,执行其他语句。


7.bool类型的值只有true和false,true的值为1,false的值为0. 如果:bool a; a = 5; 则a的值为1(true),任意非0值赋值给bool变量,值为1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值