位运算中你不知道的高深之处!

位运算之左移

                深入了解之前先来了解一下位运算的左移与异或的基本概念

                         *左移运算符 -----将操作数的二进制码整体左移指定位数,左移后右边空出来的位以 0 填充,符号 << .

                                 举例说明一: 5  << 2

                                             5的二进制码:
                                                                  
                                             左移2位后的二进制码:
                                                                    
                                                                                                                                                                                        空出来的位用 0 补齐
                                              所以,5 << 2 的运算结果就为  1 * 24+ 0* 23 + 1 * 22 + 0 * 21 + 0*20 = 20

               举例说明二: -5  << 2
                       -5的二进制码:
                                  
                       左移2位后的二进制码:
                                   

                       所以,-5 << 2的运算结果就是 -20
               
                  根据上面的举例,应该会发现:
                          5 << 2 可以看成是 5 * 22= 20 所以说5向左移2位就是5乘以22次方,那么向左移2位就是5乘以23次方

  看到这里,我想大家都对位运算的左移运算都有了一定的了解,那么问题就来了:
           问题一:如何最有效的计算出3 * 8 的值.
               通常的解法的话,就是声明两个变量m和n ,一个赋予 3 ,一个赋予 8 ,然后在输出 m * n.
             或者是直接输出 3 * 8 。当然这两个方法是可行的,但题目所说的最有效的方法。大家都知道,计算机底层都是用二进制做的运算,那么用二进制直接做运算就是一种最有效的方法,看到这里是不是会有所感悟了呢?
      那现在就揭晓最后的答案,下面给出一段代码一看便知
                             
       
                    这种方法的优点:计算效率较高,直接通过二进制做运算
                              缺点:1、要运算的的两个数,必须有一个是2的平方倍
                                    2、很难想到,所以造成可读性较低            

                               


                                                                                                                                                      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值