[问题] int 4 bits

楼主: hardware (哈味)   2016-06-22 10:13:44
开发平台(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
感谢大大帮忙!
作者: Caesar08 (Caesar)   2016-06-22 10:25:00
是每次看这种code,都有一种 "真的有必要那么省吗?"
作者: IKAFIRE (没有)   2016-06-22 10:28:00
不是4 bytes都会被allocate,但只有使用到2 bits吗?所以内存中占的空间还是4 bytes
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-06-22 10:31:00
Just do it
作者: Caesar08 (Caesar)   2016-06-22 10:33:00
补充一下,我回的是 "不晓得这样的宣告方式正不正确?"
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-06-22 10:44:00
没错有必要那么省吗 除非为了送给哪个硬件
作者: s25g5d4 (function(){})()   2016-06-22 12:30:00
bit field 不是 implementation defined 吗?这应该 non portable 吧
作者: Caesar08 (Caesar)   2016-06-22 12:41:00
to s25g5d4,是的实际大小会随着compiler与machine而不同上次就有人问过了#1NFTpMBr
作者: Qbsuran (Qbsuran)   2016-06-22 14:57:00
不是省不省的问题 有些封包表头只能这样宣告
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-06-22 15:02:00
这个看起来不是那个用途。
作者: s25g5d4 (function(){})()   2016-06-22 16:37:00
封包表头谁叫你这样宣告的 请正常宣告 uint8_t 再 shift好吗 = =
作者: askacis (ASKA)   2016-06-22 19:24:00
通常这种structure都是对应硬件register
作者: xvid (DivX)   2016-06-22 20:41:00
推楼上 韧体上处理些资料好用喔
作者: Qbsuran (Qbsuran)   2016-06-23 11:00:00
linux给的表头都是这样啊 错了吗QQ而且bit shift太麻烦了吧 结构指标能完成的干嘛还要自己bit shift

Links booklink

Contact Us: admin [ a t ] ucptt.com