博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php 位移运算符(<<左移和>>右移)
阅读量:5944 次
发布时间:2019-06-19

本文共 1094 字,大约阅读时间需要 3 分钟。

hot3.png

位移运算符
<< 位左移
左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填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,判断完以后,让前面的右移一位即可。

转载于:https://my.oschina.net/u/435872/blog/134802

你可能感兴趣的文章
织梦首页、列表页调用文章body内容的两种方法
查看>>
Codeforces Round #277 (Div. 2)D(树形DP计数类)
查看>>
openstack中虚拟机怎么与物理机通信
查看>>
实例具体解释:反编译Android APK,改动字节码后再回编译成APK
查看>>
DEDECMS点击主栏目默认显示第一个子栏目列表的方法
查看>>
相关系数图可视化
查看>>
python-ConfigParser模块【读写配置文件】
查看>>
Gym 100952E&&2015 HIAST Collegiate Programming Contest E. Arrange Teams【DFS+剪枝】
查看>>
dubbo搭建例子
查看>>
给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)...
查看>>
SQL Server 并行操作优化,避免并行操作被抑制而影响SQL的执行效率
查看>>
ActiveMQ 基于zookeeper的主从(levelDB Master/Slave)搭建以及Spring-boot下使用
查看>>
三种方法解决 Failed to start LSB: Bring up/down networking 问题
查看>>
Event-Souring模式
查看>>
Python: Soft_max 分类器
查看>>
微软在Build 2016开发者大会中发布 “认知服务”,牛津计划有正式名字啦!
查看>>
大数据的正确用法你get到了吗?
查看>>
[Nginx]用Nginx实现与应用结合的訪问控制 - 防盗链
查看>>
数据结构中八大排序算法
查看>>
Sky数
查看>>