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));
  • 相关阅读:
    【转】【矩阵】坐标的矩阵变换
    cocos2d-x聊天气泡
    lua自用的函数收集
    lua错误收集
    cocos2d-x中CCEditbox导出到lua
    love2d杂记9--光照效果
    (转)love2d有用的辅助库--gamework
    XPath语法 在C#中使用XPath示例
    WCF的CommunicationObjectFaultedException异常问题
    WCF绑定(Binding)
  • 原文地址:https://www.cnblogs.com/BeautyFuture/p/6077675.html
Copyright © 2011-2022 走看看