zoukankan      html  css  js  c++  java
  • PHP 位移运算符(<<左移和>>右移)

    位移运算符

    << 位左移

    左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃。例 如
    $a=10;
    $b=$a<<2;
    则$b=40,根据手册描述可以看出位运算可以看出向左移一位,则是实现乘2运算。由于位移操作的运算速度比乘法的 运算速度高很多。因此在处理数据的乘法运算的时,采用位移运算可以获得较快的速度。
    提示 将所有对2的乘法运算转换为位移运算,可提高程序的运行效率

    示例:
    以下三种表达方式是一个意思。
    $a = 1024;
    for($i=1; $i<$a; $i = $i+$i){
    echo $i.” ”;
    }

    $a = 1024;
    for($i=1; $i<$a; $i = 2*$i){
    echo $i.” ”;
    }

    $a = 1024;
    for($i=1; $i<$a; $i = $i<<1){
    echo $i.” ”;
    }

    >> 位右移
    右移运算的实质是将对应的数据的二进制值逐位右移若干位,并舍弃出界的数字。如果当前的数为无符号数, 高位补零。例如:
    $a = 25;//11001
    b=a>>2;//等价于:11001 >> 01100, 01100 >> 00110.那么110 =》 6,即25/4 = 6
    b=(0000 0000 0000 0110)=6
    如果当前的数据为有符号数,在进行右移的时候,根据符号位决定左边补0还是补1。
    如果符号位为0,则左 边补0;但是如果符号位为1,则根据不同的计算机系统,可能有不同的处理方式。
    可以看出位右移运算,可以实现对除数为2的整除运算。

    提示 将所有对2的整除运算转换为位移运算,可提高程序的运行效率

    举例:输入一个整数,判断这个数中有几个二进制位1?例如输入67,输出结果应该为3。
    因为67的相应二进制数为00000000 01000011(0043H),有3个1出现。
    分析:要判断是不是1,只需要判断该位与1与以后是不是1就可以知道。一个整数,判断16次即可。
    main(){
      int num,k;
      int count=0;/* 记录1的个数 */
      scanf(%d,&num);
      for(k=0;k<16;k++){
        if(num&1==1) count++; /* 判断最低位是不是1 */
        num>>=1;/* num右移1位 */
      }
      printf(%d ,count);
    }

    这样每次都判断最低位是不是1,判断完以后,让前面的右移一位即可。

  • 相关阅读:
    使用 asp.net mvc和 jQuery UI 控件包
    ServiceStack.Redis 使用教程
    HTC T8878刷机手册
    Entity Framework CodeFirst 文章汇集
    2011年Mono发展历程
    日志管理实用程序LogExpert
    使用 NuGet 管理项目库
    WCF 4.0路由服务Routing Service
    精进不休 .NET 4.0 (1) asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进
    精进不休 .NET 4.0 (7) ADO.NET Entity Framework 4.0 新特性
  • 原文地址:https://www.cnblogs.com/lbnnbs/p/5883799.html
Copyright © 2011-2022 走看看