switch和if else

1,switch不加break为什么具有直通性?

      switch没有循环,switch功能与if else一样。如果不加break,执行完一个case后还会继续执行下面的case语句,直到遇见break为止。(执行了多个case语句后就会有多个输出结果)


2,switch和if else哪个效率更高?

switch效率更高。

区别:if else要从上至下一层层比较,有点:不限比较类型和内容,可以使用 double、float、string或自定义类型。

           switch可以直接选中,可读性更好。在多条件时建议使用switch。

有一种说法:编译器优化程度相同的情况下,switch语句击中第三个选项的时间跟if /else if击中第三个选项的时间相同。

击中第一,第二选项的速度if语句快,击中第四以及之后的选项的速度switch语句快。

所以,如果所有选项出现的概率相同:5个选项(包括default)的情况下,switch和if/else if相同。低于5个选项时if else快,高于5个选项时switch快。


3,计算1个整型数字的二进制中1的个数

n&(n-1)的妙用 (&:按位与)

举一个例子:n=0000 1011   n-1=0000 1010    n&(n-1)=0000 1010

                    n=0000 1010   n-1=0000 1001    n&(n-1)=0000 1000

                    n=0010 0000   n-1=0001 0000    n&(n-1)=0000 0000

                    n=0010 1100   n-1=0010 1010    n&(n-1)=0010 1000

总结:n&(n-1)将n的二进制表示中的最低位的1改为0;

应用:1,求某一个数的二进制表示中1的个数

               int tmp = 0;

               while(n>0)

               {

                      tmp++;

                      n=n&(n-1);                //n&=(n-1)

               }

          eg:0000 0110  tmp=0 --> 0000 0100  tmp=1 --> 0000 0000 tmp=2 -->跳出循环

     2,判断一个数是否是2的方幂

           满足n>0&&((n&(n-1))==0)时,n为2的方幂

           eg:n 0000 0010  n&(n-1) 0000 0000    n=2^1   为2的方幂

                n 0001 0000  n&(n-1) 0000 0000    n=2^4   为2的方幂

                n 0011 0100  n&(n-1) 0011 0000    n=2^5+2^4+2^2   不是2的方幂

     3,待续。。。









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值