zoukankan      html  css  js  c++  java
  • 按位反转

    //PHP
    
    //32位还是64位 谨防溢出
    
    function revse32int($a,$len)//len是要旋转的数字位数,从右侧起
    {
        //$a = 0x18b  0b110001011  $len = 9
        $tmp=$i=$j=0;
        for($i=0,$j=$len-1;$i<$len;++$i,--$j)
        {
            if(($a>>$i)&1) //不为0
                $tmp|=(($a>>$i)&1)<<$j;//$tmp 0b000000000  |  0b110001011 >> $i  << $j
                    /***
                    步骤分析:
                    第一次:
                        110001011 >> 0  == 110001011
                        110001011 & 000000001 = 000000001 //确保只保存当前反转的位的值
                        000000001 << 8  == 100000000
                        000000000 | 100000000 == 100000000
                        
                    第二次
                        110001011 >> 1 == 011000101
                        011000101 & 000000001 = 000000001
                        000000001 << 7 == 010000000
                        100000000 | 010000000 == 110000000
                        
                    第三次
                        110001011 >> 2 == 001100010
                        001100010 & 000000001 = 000000000
                        000000000 << 6 == 000000000
                        110000000 | 000000000 == 110000000
                        
                    
                    ...
                    
                    第8次
                        110001011 >> 7 == 000000011
                        000000011  & 000000001 = 000000001
                        000000001 << 1 == 000000010
                        110100000 | 000000010 = 110100010
                        
                    第9次
                        110001011 >> 8 == 000000001
                        000000011  & 000000001 = 000000001
                        000000001 << 0 == 000000001
                        110100010 | 000000001 = 110100011
                        
                    结论
                        反转 不断把倒数n位 放置到 顺数n位
                    
                    **/
        }
        
        
        return $tmp;
        
     
    }
    
        $a=0x18b;//0b110001011  9位
        /**echo hexdec((int)$a);
        $b = (string)decbin(hexdec($a));
        echo $b;**/
        
    printf("%x
    ",revse32int($a,9));
    var_dump(revse32int(0x8b,8));
  • 相关阅读:
    Autofac-案例
    Autofac-DynamicProxy(AOP动态代理)
    AutoFac注册2-程序集
    MVC添加跨域支持Cros
    redis笔记3-基础知识与常用命令
    Redis笔记2-Redis安装、配置
    Redis笔记-八种数据类型使用场景
    ActionResult源码分析笔记
    .NET UrlRouting原理
    webapi使用ExceptionFilterAttribute过滤器
  • 原文地址:https://www.cnblogs.com/BeautyFuture/p/6077675.html
Copyright © 2011-2022 走看看