[問題] union + struct + bitfield的問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
freebsd 8.0 + gcc4.2.1 , run in winxp + virtualBox
在網路閒逛 看到兩個非常奇怪的問題, 如下:
[case1]
請問以下的union大小為多少呢???
union A
{
struct
{
unsinged int p1:4;
unsigned int p2:2;
unsigned int p3:4;
unsigned int p4:6;
}
}
經過測試結果是 4Bytes!!!
我想的是bitfields 總共16bits = 2 Bytes, 所以應該為 2 Bytes才對阿
請問這邊是哪裡想錯了呢?? 又這邊有一般的規則嗎???
[case2]
union A
{
struct
{
unsinged int p1:4;
unsigned int p2:2;
unsigned int p3:4;
unsigned int p4:6;
}
unsigned int kk;
}
union A obj = {3,2,4,5};
printf("value of kk: %u\n", obj.kk);
直接跑的結果是:316971043
bit pattern: 10111111 10111111 00010101 00100011
思考: p1 p2 p3 p4
0011 10 0100 000101
|<- 8 bits ->||<- 8bits->|
以bytes為單位不管以big-endia or little endian寫入,都跟跑出來的結果差很多
但是呢 若是以bit-fields為單位以little endian順序寫入, 則結果的bit pattern
後半段符合這個寫入結果.......(bit pattern前半段則是怎麼想都湊不出答案 @_@||)
一樣都是想不透...請各方好手指點迷津
這邊是不是我想錯了, 用錯方法或是哪邊有規則可以推導類似的問題呢???
感謝大家!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.207.162
※ 編輯: rifiz 來自: 114.43.207.162 (06/13 16:12)
→
06/13 16:33, , 1F
06/13 16:33, 1F
→
06/13 17:09, , 2F
06/13 17:09, 2F
→
06/13 17:09, , 3F
06/13 17:09, 3F
→
06/13 17:10, , 4F
06/13 17:10, 4F
→
06/13 17:11, , 5F
06/13 17:11, 5F
→
06/13 17:13, , 6F
06/13 17:13, 6F
→
06/13 21:26, , 7F
06/13 21:26, 7F
→
06/14 00:27, , 8F
06/14 00:27, 8F
→
06/14 00:28, , 9F
06/14 00:28, 9F
→
06/14 00:29, , 10F
06/14 00:29, 10F
→
06/14 00:47, , 11F
06/14 00:47, 11F
→
06/14 00:48, , 12F
06/14 00:48, 12F
→
06/14 00:49, , 13F
06/14 00:49, 13F
→
06/14 00:50, , 14F
06/14 00:50, 14F
→
06/14 00:50, , 15F
06/14 00:50, 15F
→
06/14 00:56, , 16F
06/14 00:56, 16F
→
06/14 00:57, , 17F
06/14 00:57, 17F
→
06/14 00:58, , 18F
06/14 00:58, 18F
→
06/14 00:58, , 19F
06/14 00:58, 19F
→
06/14 01:08, , 20F
06/14 01:08, 20F
→
06/14 01:09, , 21F
06/14 01:09, 21F
→
06/14 01:10, , 22F
06/14 01:10, 22F
→
06/14 01:10, , 23F
06/14 01:10, 23F
→
06/14 15:17, , 24F
06/14 15:17, 24F
→
06/14 18:08, , 25F
06/14 18:08, 25F
→
06/15 03:32, , 26F
06/15 03:32, 26F
→
06/15 03:33, , 27F
06/15 03:33, 27F
→
06/15 04:13, , 28F
06/15 04:13, 28F
→
06/15 04:17, , 29F
06/15 04:17, 29F
→
06/15 04:18, , 30F
06/15 04:18, 30F
→
06/15 04:19, , 31F
06/15 04:19, 31F
→
06/15 04:25, , 32F
06/15 04:25, 32F
→
06/15 04:25, , 33F
06/15 04:25, 33F
→
06/15 04:35, , 34F
06/15 04:35, 34F
→
06/15 04:36, , 35F
06/15 04:36, 35F
→
06/15 04:37, , 36F
06/15 04:37, 36F
→
06/15 04:37, , 37F
06/15 04:37, 37F
→
06/15 08:02, , 38F
06/15 08:02, 38F
→
06/15 08:05, , 39F
06/15 08:05, 39F
→
06/15 08:05, , 40F
06/15 08:05, 40F
→
06/15 09:42, , 41F
06/15 09:42, 41F
推
06/15 22:56, , 42F
06/15 22:56, 42F
→
06/15 22:57, , 43F
06/15 22:57, 43F
→
06/16 12:42, , 44F
06/16 12:42, 44F
→
06/16 12:43, , 45F
06/16 12:43, 45F
→
06/16 12:44, , 46F
06/16 12:44, 46F
→
06/16 12:46, , 47F
06/16 12:46, 47F
→
06/16 12:46, , 48F
06/16 12:46, 48F
→
06/16 12:47, , 49F
06/16 12:47, 49F
→
06/16 12:50, , 50F
06/16 12:50, 50F
推
06/17 00:42, , 51F
06/17 00:42, 51F
→
06/17 00:43, , 52F
06/17 00:43, 52F
→
06/17 00:44, , 53F
06/17 00:44, 53F
推
06/17 01:07, , 54F
06/17 01:07, 54F
→
06/17 01:07, , 55F
06/17 01:07, 55F
→
06/17 01:09, , 56F
06/17 01:09, 56F
→
06/17 01:10, , 57F
06/17 01:10, 57F
→
06/17 01:10, , 58F
06/17 01:10, 58F
推
06/17 21:41, , 59F
06/17 21:41, 59F
→
06/17 21:42, , 60F
06/17 21:42, 60F
→
06/17 21:42, , 61F
06/17 21:42, 61F
推
06/18 00:00, , 62F
06/18 00:00, 62F
→
06/18 00:01, , 63F
06/18 00:01, 63F
→
06/18 00:01, , 64F
06/18 00:01, 64F
→
06/18 00:02, , 65F
06/18 00:02, 65F
→
06/18 00:03, , 66F
06/18 00:03, 66F
→
06/21 10:24, , 67F
06/21 10:24, 67F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章