在學習redis原始碼的時候,看到了這段**。很少寫blog,不太會表達自己的觀點。
static unsigned long rev(unsigned long v)
return v;
}
舉乙個例:所有的數都用二進位制表示
假設v=11001010,unsigned long為1個位元組(方便)
s = 4 mask = 00001111 v = (00001100 & 00001111) | (10100000 & 11110000) = 10101100
s = 2 mask = 00110011 v = (00101011 & 00110011) | (10110000 & 11001100) = 10100011
s = 1 mask = 01010101 v = (01010001 & 01010101) | (01000110 & 10101010) = 01010011
如果有乙個數為value,佔1個位元組(0-7),第k位,翻轉後位於第7-k位。
在這個特定的例子中 位於s處,翻轉後位於e處,且x1 + x2 == 7,對於乙個8位的數進行翻轉相當於每一位都要移動7次,7 = 4 + 2 + 1,從while( (s >>=1) > 0)可以看出。
所以當s=4,相當於移動了4位,s=2時,移動了2位,s=1時,移動了1位,這裡使用了位運算的技巧。
求將乙個數的二進位制位逆序演算法
輸入1個位元組,將其二進位制位顛倒後,再輸出1個位元組 比如input 0110 0101 output 1010 0110 uint8 t bit8 order reverse uint8 t ch bit val 1 bit val reverse 1 return ch new 輸入2個位元組...
轉換成二進位制翻轉乙個數
實現函式unsigned int reverse bit unsigned int value 這個函式的返回值是value的二進位制位模式從左到右翻轉後的值。如 在32位機器上25這個值包含下列各位 00000000000000000000000000011001 翻轉後 2550136832 1...
c語言 乙個數的二進位制位的倒位
在32位計算機中儲存乙個int型別的整形數時是按照二進位制的的32個位元為儲存的,例如 25 儲存時儲存的是 00000000 00000000 00000000 00011001 而將其二進位制數到位得到的是 11001000 00000000 00000000 00000000 為了實現二進位制...