關於MSB和LSB的C語言操作
阿新 • • 發佈:2019-02-08
一串二進位制數從左往右數,最高位為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
通過上面的操作例項,我們可以看到不同位元的資料位的變化,以及如何來操作它們。