作者hardware (哈味)
看板C_and_CPP
标题[问题] int 4 bits
时间Wed Jun 22 10:13:44 2016
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
问题(Question):
想要宣告一个4bits的正整数,
存放范围 0~15
不晓得这样的宣告方式正不正确?
struct {
unsigned int boy : 4;
unsigned int girl : 4;
} age;
不晓得这样是不是
boy 4 bits
girl 4 bits
我看网路资料他的参考Example是
struct {
unsigned int widthValidated : 1;
unsigned int heightValidated : 1;
} status;
The above structure requires 4 bytes of memory space for status variable, but
only 2 bits will be used to store the values.
宣告4 bytes 但是只有2 bits会存放到memory
感谢大大帮忙!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.117.89.77
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1466561627.A.057.html
※ 编辑: hardware (140.117.89.77), 06/22/2016 10:17:56
1F:→ Caesar08: 是 06/22 10:25
2F:→ Caesar08: 每次看这种code,都有一种 "真的有必要那麽省吗?" 06/22 10:26
3F:推 IKAFIRE: 不是4 bytes都会被allocate,但只有使用到2 bits吗? 06/22 10:28
4F:→ IKAFIRE: 所以记忆体中占的空间还是4 bytes 06/22 10:28
5F:→ MOONRAKER: Just do it 06/22 10:31
6F:→ Caesar08: 补充一下,我回的是 "不晓得这样的宣告方式正不正确?" 06/22 10:33
7F:→ MOONRAKER: 没错有必要那麽省吗 除非为了送给哪个硬体 06/22 10:44
8F:推 s25g5d4: bit field 不是 implementation defined 吗? 06/22 12:30
9F:→ s25g5d4: 这应该 non portable 吧 06/22 12:30
10F:→ Caesar08: to s25g5d4,是的 06/22 12:41
11F:→ Caesar08: 实际大小会随着compiler与machine而不同 06/22 12:42
12F:→ Caesar08: 上次就有人问过了#1NFTpMBr 06/22 12:43
13F:推 Qbsuran: 不是省不省的问题 有些封包表头只能这样 06/22 14:57
14F:→ Qbsuran: 宣告 06/22 14:57
15F:→ MOONRAKER: 这个看起来不是那个用途。 06/22 15:02
16F:推 s25g5d4: 封包表头谁叫你这样宣告的 请正常宣告 uint8_t 再 shift 06/22 16:37
17F:→ s25g5d4: 好吗 = = 06/22 16:37
18F:推 askacis: 通常这种structure都是对应硬体register 06/22 19:24
19F:推 xvid: 推楼上 韧体上处理些资料好用喔 06/22 20:41
20F:推 Qbsuran: linux给的表头都是这样啊 错了吗QQ 06/23 11:00
21F:→ Qbsuran: 而且bit shift太麻烦了吧 结构指标能完成的干嘛还要自己b 06/23 11:01
22F:→ Qbsuran: it shift 06/23 11:01