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));
  • 相关阅读:
    背水一战 Windows 10 (61)
    背水一战 Windows 10 (60)
    背水一战 Windows 10 (59)
    背水一战 Windows 10 (58)
    背水一战 Windows 10 (57)
    背水一战 Windows 10 (56)
    背水一战 Windows 10 (55)
    背水一战 Windows 10 (54)
    背水一战 Windows 10 (53)
    背水一战 Windows 10 (52)
  • 原文地址:https://www.cnblogs.com/BeautyFuture/p/6077675.html
Copyright © 2011-2022 走看看