[問題] 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