1. 程式人生 > >關於MSB和LSB的C語言操作

關於MSB和LSB的C語言操作

一串二進位制數從左往右數,最高位為MSB,最右為LSB;我們知道一個data是有unsigned和signed之分,以及32位或是64位等區別。這裡我以16位的有符號位二進位制數為例,用C語言實際操作一串二進位制數的有效位,實現MSB與LSB的排序的調換。

#include<stdlib.h>

int16_t  sort(int16_t num)

{

return(

num  >>  12 & 0x000F ^

num  >>  4 & 0x00F0 ^

num  << 12 & 0xF000 ^

num  << 4  &  0x0F00

);

}

int main()

{

int16_t a=-0x1234;

int16_t b=sort(a);

while(1);

return 0;

}

這裡我們可以先對.c檔案進行gcc編譯,然後使用gdb進行過程的驗證;

$gcc -g -o test test.c

$gdb test

(gdb)run

(gdb)p/x a

 $1=0xedcc

(gdb)p/x b

$2=0xccde

通過上面的驗證我們可以通過GDB來看到最終的結果;為了瞭解其中的執行過程,我們也可以使用GDB觀察二進位制數的數位的前後變化:

(gdb)p/x a

$3=0xedcc

(gdb)p/x a >> 12

$4=0xfffffffe;

(gdb)p/x a >> 12 & 0x000F

$5=0xe

通過上面的操作例項,我們可以看到不同位元的資料位的變化,以及如何來操作它們。