84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
RT,這種結構最後一次賦值會把之前的賦值覆蓋掉,所以很好奇請問一下這種東西一般應用在什麼場景呢?
省內存,方便取高低位元組
最初目的就是為了節省內存,你想當初C語言在上個世紀八十年代才開始大規模使用,那時的內存很寶貴的。
可以提供對同一段資料不同的存取介面。 。 。舉個例子,曾經做嵌入式的時候,可以這樣寫:
// 没有字节对齐,或者字节对齐为1,int 占4字节 typedef union { unsigined int num; struct { unsigned char byte0; unsigned char byte1; unsigned char byte2; unsigned char byte3; } bytes; } Demo;
不過這樣寫也不太簡潔,而且這段程式碼在 PC 裡面和直接透過位移取每一個位元組效率是一樣的。只是舉個例子,不要太糾結。
一般用來判斷大小端
在嵌入式開發中用的比較多,我這裡給個例子,和上面 @zonxin 的差不多
typedef struct __regular_descriptor_4_high { union { U32 value; struct { U32 raid_id0 : 4; U32 raid_cmd0 : 4; U32 raid_id1 : 4; U32 raid_cmd1 : 4; U32 raid_id2 : 4; U32 raid_cmd2 : 4; U32 raid_id3 : 4; U32 raid_cmd3 : 4; } reg_des_bit; } u; } reg_des_4_high;
要讀取整個暫存器可以讀value,要寫不同的bit-filed就用reg_des_bit來寫。
省內存,方便取高低位元組
最初目的就是為了節省內存,你想當初C語言在上個世紀八十年代才開始大規模使用,那時的內存很寶貴的。
可以提供對同一段資料不同的存取介面。 。 。
舉個例子,曾經做嵌入式的時候,可以這樣寫:
不過這樣寫也不太簡潔,而且這段程式碼在 PC 裡面和直接透過位移取每一個位元組效率是一樣的。只是舉個例子,不要太糾結。
一般用來判斷大小端
在嵌入式開發中用的比較多,我這裡給個例子,和上面 @zonxin 的差不多
要讀取整個暫存器可以讀value,要寫不同的bit-filed就用reg_des_bit來寫。