位操作 高低位交換(迴圈左移 右移)

2022-04-28 22:18:25 字數 683 閱讀 3053

給出乙個16位的無符號整數。稱這個二進位制數的前8位為「高位」,後8位為「低位」。現在寫一程式將它的高低位交換。例如,數34520用二進位制表示為:

10000110 11011000

將它的高低位進行交換,我們得到了乙個新的二進位制數:

11011000 10000110

它即是十進位制的55430。

這個問題用位操作解決起來非常方便,設x=34520=10000110 11011000(二進位制) 由於x為無符號數,右移時會執行邏輯右移即高位補0,因此x右移8位將得到0000000010000110。

而x左移8位將得到11011000 00000000。可以發現只要將x>>8與x<<8這兩個數相或就可以得到11011000 10000110。用**實現非常簡潔:

x = (x>>8)|(x<<8)

擴充套件到一搬情形:

設sizeof(int)=32;

無符號整型變數迴圈右移k次的結果為:

a0a1......a               a31

-k+1a31-k......a30a31a0.......a31-k

x = (x << 32-k) | (x >> k);

無符號整型變數迴圈左移k次的結果為:

x = (x >> 32-k) | (x << k);

高低位交換

給出乙個小於2 32的正整數。這個數可以用乙個32位的二進位制數表示 不足32位用0補足 我們稱這個二進位制數的前16位為 高位 後16位為 低位 將它的高低位交換,我們可以得到乙個新的數。試問這個新的數是多少 用十進位制表示 例如,數1314520用二進位制表示為0000 0000 0001 01...

高低位交換

題目描述 輸入乙個無符號整數n unsigned int型別 n可以用乙個32位的二進位制數表示 不足32位用0補足 我們稱這個二進位制數的前16位為 高位 後16位為 低位 輸出將n的高位和低位交換後的值 用十進位制表示 例如 輸入1314520,它的二進位制表示為0000 0000 0001 0...

演算法 位元組高低位交換

對乙個位元組資料,逐個交換其高低位,例如11010001,經過0 7,1 6,2 5,3 4對應位的交換,變成10001011 對於該問題,我們最先想到的是對原位元組通過移位操作來逐位處理,使用另乙個變數來儲存交換後的結果。這種解決方案處理起來思路清晰,編寫 應該不難。下面是該思路對應的 unsig...