1. 程式人生 > >一道關於位段及大小端的面試題

一道關於位段及大小端的面試題

輸出下面這一道題的輸出:

struct mybitfields
{
    unsigned short a : 4;
    unsigned short b : 5;
    unsigned short c : 7;
} test

void main(void)
{
    int i;
    test.a = 2;
    test.b = 3;
    test.c = 0;
    i = *((short *)&test);
    printf("%d\n", i);
}

這道題的第一步首先你要清楚“:”的含義,冒號相當於分配幾位空間。所以我們就可以知道這裡的分配的成員a 4位的空間, b 5位,c 7位,一共是16位,正好兩個位元組。

首先我們要清楚儲存方式是這樣的:
這裡寫圖片描述

當然我們要考慮到在這所採用的是小端位元組序,然後取((short )&test),這個意思就是在這裡面去了test地址的2個位元組,然後進行解引用。最後的結果:
這裡寫圖片描述