前一篇的位元組倒序是用for迴圈處理的,雖然也可以實現倒序,當相對低效,乙個位元組需要迴圈8次,每次迴圈內部又有6條指令,完成乙個位元組倒序都有執行48條指令。這裡提供另一種方法,相對於for迴圈高效不少,只需執行13條指令即可完成倒序,具體**如下圖。
uint8_t byte_change(uint8_t data)
**解析:假如data=0x12345678
1)data = ((data & 0xaa) >> 1) | ((data & 0x55) << 1);
這裡主要是將data相鄰的每兩位交換,把高一位左移1位變成低一位,再把低一位右移1位變成高一位,得到data=0x21436587;
2)data = ((data & 0xcc) >> 2) | ((data & 0x33) << 2);
((data >> 2) & 0x33)主要是交換前四位,高兩位和低兩位位置互換,
((data & 0x33) << 2)主要是交換後四位,高兩位和低兩位位置互換,
得到data=0x43218765;
3) data = (data >> 4) | (data << 4);
從2)顯然看出,高四位和低四位都排序好了,這裡是將高四位左移4位變為低四位,低四位右移4位變為高四位,最後得到data=0x87654321。
至此,位元組的按位倒序已完成。
C語言實現按位倒序
最近遇到了乙個程式設計問題,怎樣使得乙個位元組的資料實現按位倒序?舉例 0xe1按位倒序的話就是0x87,0x81按位倒序還是0x81 說明 最高位變成最低位,次高位變成次低位。依次類推,現在用指標來實現,如下 include struct group union fit intmain int a...
C語言按位與 按位或 按位異或 按位取反(二)
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的...
簡單實用演算法 位元組位序反轉
演算法概述 反轉乙個位元組說的是位序反轉,別將它和大端轉小端混淆了,所謂大端和小端指的是位元組序。位元組位序反轉的實現vb.net教程演算法很多,就是看看誰的演算法效率更高了。高手不是能寫出最美麗的程式而是能寫出既美麗同時效率又是最高的程式。如果乙個人寫的程式很美麗,很直觀,只能說明該程式設計師對語...