位移运算符

<< 位左移

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

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

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

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

>> 位右移
右移运算的实质是将对应的数据的二进制值逐位右移若干位,并舍弃出界的数字。如果当前的数为无符号数, 高位补零。例如:
$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\n,count);
}

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

PHP 位移运算符(<<左移和>>右移)的更多相关文章

  1. Java,C 位移运算符 有符号右移>>与无符号右移>>>

    个人博客 地址:https://www.wenhaofan.com/a/20181029232749 有符号右移 正数有符号右移 首先计算4>>2 将4转为二进制 0000 0100 右移 ...

  2. 【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍

    转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考 ...

  3. C语言位运算符:与、或、异或、取反,左移和右移

    C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...

  4. C语言位运算符:与、或、异或、取反、左移和右移

    语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符 ...

  5. C语言位运算符:与、或、异或、取反、左移与右移详细介绍

    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...

  6. C语言之左移和右移运算符

    C语言中的左移和右移运算符移位后的结果老是忘记,最近在刷有关位操作的题目,正好整理下:   1. 左移运算符(<<) 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指 ...

  7. Java补码表和位移运算符

    在java中数据都是以二进制的形式保存的. 但是我们看到的数据怎么是10进制的? 因为java展示之前会自动调用toString()方法 这里以4位2进制为例,4位2进制只能表示16个数,即0-15. ...

  8. Java学习路线:Java中的位移运算符介绍

    学习java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,学到java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天给大家分享的技术知识是:ja ...

  9. Java 中位移运算符 >>,>>>,<<

    Java 中的三种位移运算符 java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     ...

随机推荐

  1. Conntect Bluetooth devices in iOS.

    I understand that the External Accessory framework in iOS 3.0 and later will allow my application to ...

  2. 关于项目使用可配置的properties 文件的实现

    maven项目在项目install的时候配置如下         注意value的\       之后利用spring3.0 以后的读取properties 配置如下 然后我们就可以在setter方法 ...

  3. 开发问题(C#)

    1. 重新引入dll文件之后,显示黄色感叹号,可能的原因:dll文件受损或者dll版本与工程Framework版本不一致. 2. 错误 232 无法将文件“..\SES.Common\bin\Debu ...

  4. video 与 audio

    Play方法:使用play方法来播放媒体,自动将元素的paused属性的值变为false.Pause方法:使用pause方法来暂停播放,自动将元素的paused属性的值变为true.Load方法:使用 ...

  5. 《C与指针》第二章练习

    本章问题 1.Comments in C do not nest(嵌套).What would be the result of "commenting out" the code ...

  6. 渴切API参考手册

    渴切:是国内优秀的开源css框架. 渴切是一个开源中文 (X)HTML/CSS 框架 ,它的目的是减少你的css开发时间.它提供一个可靠的css基础去创建你的项目,能够用于网站的快速设计,通过重设和重 ...

  7. 使用Python玩转WMI

    最近在网上搜索Python和WMI相关资料时,发现大部分文章都千篇一律,并且基本上只说了很基础的使用,并未深入说明如何使用WMI.本文打算更进一步,让我们使用Python玩转WMI. 1 什么是WMI ...

  8. python中获取当前所有的logger

    获得当前所有logger的列表的程序如下: import logging for name in logging.Logger.manager.loggerDict.keys(): logger = ...

  9. Xamarin.Froms项目中包含的文件

    Clearly, the program created by the Xamarin.Forms template is very simple, so this is an excellent o ...

  10. shell script练习

    执行脚本的几种方式: 1. sh a.sh 或者  bash a.sh  调用的是 /bin/bash 进程执行的,所以脚本不需要执行权限. 2. 直接使用绝对路径执行, /home/script/a ...