此文用于记录用C语言开发进行嵌入式开发,对位操作的相关处理手段。
以下是详解
假设data = 0x59 ,二进制表示位 0101 1001
第一步操作:将前后四位进行交换
data << 4 变成了 1001 0000 ,data >> 4变成了 0000 0101 ,将 1001 0000 和 0000 0101进行位或处理,有1为1,全0为0。
得到的结果为 data = 1001 0101。可以发现四位已经交换了。
第二步操作:将数据两两进行交换
第一步操作之后,data = 1001 0101
data << 2 变成了 0101 0100,和 0xcc即1100 1100进行位与操作,有0为0,全1为1。得到的结果是 0100 0100。
data >> 2 变成了 0010 0101,和0x33即0011 0011进行位与操作,有0为0,全1为1。得到的结果是 0010 0001。
再将两次操作的结果进行位或运算,得到的结果是 data = 0110 0101。//注意此时的0101是进行了交换的
第三步:将数据中间两两进行对换
第二步操作之后,data = 0110 0101
data << 1 变成了 1100 1010,和0xaa即1010 1010进行位与操作,得到的结果是 1000 1010。
data >> 1 变成了 0011 0010,和0x55即0101 0101进行位与操作,得到的结果是 0001 0000。
再将两次操作的结果进行位或运算得到的结果是 1001 1010。此时已经完成了和原数据0101 1001的逆序操作。