看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1466561627.A.057.html ※ 編輯: hardware (140.117.89.77), 06/22/2016 10:17:56
Caesar08: 是 06/22 10:25
Caesar08: 每次看這種code,都有一種 "真的有必要那麼省嗎?" 06/22 10:26
IKAFIRE: 不是4 bytes都會被allocate,但只有使用到2 bits嗎? 06/22 10:28
IKAFIRE: 所以記憶體中佔的空間還是4 bytes 06/22 10:28
MOONRAKER: Just do it 06/22 10:31
Caesar08: 補充一下,我回的是 "不曉得這樣的宣告方式正不正確?" 06/22 10:33
MOONRAKER: 沒錯有必要那麼省嗎 除非為了送給哪個硬體 06/22 10:44
s25g5d4: bit field 不是 implementation defined 嗎? 06/22 12:30
s25g5d4: 這應該 non portable 吧 06/22 12:30
Caesar08: to s25g5d4,是的 06/22 12:41
Caesar08: 實際大小會隨著compiler與machine而不同 06/22 12:42
Caesar08: 上次就有人問過了#1NFTpMBr 06/22 12:43
Qbsuran: 不是省不省的問題 有些封包表頭只能這樣 06/22 14:57
Qbsuran: 宣告 06/22 14:57
MOONRAKER: 這個看起來不是那個用途。 06/22 15:02
s25g5d4: 封包表頭誰叫你這樣宣告的 請正常宣告 uint8_t 再 shift 06/22 16:37
s25g5d4: 好嗎 = = 06/22 16:37
askacis: 通常這種structure都是對應硬體register 06/22 19:24
xvid: 推樓上 韌體上處理些資料好用喔 06/22 20:41
Qbsuran: linux給的表頭都是這樣啊 錯了嗎QQ 06/23 11:00
Qbsuran: 而且bit shift太麻煩了吧 結構指標能完成的幹嘛還要自己b 06/23 11:01
Qbsuran: it shift 06/23 11:01