全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1280
推到 Plurk!
推到 Facebook!

定義結構的特殊符號使用問題

尚未結案
hwmike6979
一般會員


發表:3
回覆:6
積分:1
註冊:2005-07-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-09 10:43:37 IP:61.218.xxx.xxx 未訂閱
各位大大:   以下是我參閱的一個sample code的結構定義內容 typedef struct {   unsigned int nMsgType:8;   unsigned int nDataSize:16; }MSG_HEADER, *PMSG_HEADER;    想請教, nMsgTpe:8中的":8"指的是什麼定義?    謝謝
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-09 11:34:43 IP:61.229.xxx.xxx 未訂閱
unsigned int 的其中 8 bit 給 nMsgType 使用
hwmike6979
一般會員


發表:3
回覆:6
積分:1
註冊:2005-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-15 08:55:29 IP:61.218.xxx.xxx 未訂閱
再請教一下, 既然已宣告 unsigned int, 為何要特別指定8bit,是否有類似節省記憶體的效果?
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-15 10:37:51 IP:59.104.xxx.xxx 未訂閱
引言: 再請教一下, 既然已宣告 unsigned int, 為何要特別指定8bit,是否有類似節省記憶體的效果?
int 的資料表示有正數跟負數 unsigned int 的資料表示只有正數。 所佔的記憶體是一樣多。 所表示的範圍會不同。
hwmike6979
一般會員


發表:3
回覆:6
積分:1
註冊:2005-07-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-15 14:24:15 IP:61.218.xxx.xxx 未訂閱
>>引言: >>-------------------------------------------------------------------->>int 的資料表示有正數跟負數 >>unsigned int 的資料表示只有正數。 >>所佔的記憶體是一樣多。 >>所表示的範圍會不同。 以上您說的,我知道, 我是要問使用unsigned int nMsgType:8,其中特別用8bit宣告, 那是有何用意?
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-15 16:02:18 IP:59.104.xxx.xxx 未訂閱
引言: 以上您說的,我知道, 我是要問使用unsigned int nMsgType:8,其中特別用8bit宣告, 那是有何用意?
知道就用點腦子呀。 以 char 跟 unsigned char 為例 如果它放入 255 會變怎樣? 如果放入 -1 又會變成怎樣? 那一個 bit 會錯亂? char 能不能放入 128? 放入後的就成了多少?帶負號的數了。 想想為什麼吧。
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-15 17:08:53 IP:61.229.xxx.xxx 未訂閱
如果要設定某個 unsigned int 的最右邊的 byte, 而其他 byte 不更動的話,我們應該這麼處理 unsigned int aTest; aTest&=0xffffff00; // 清掉最右邊的 byte aTest|=(aNewValue&0xff); // 設定 aNewValue 到 aTest 的值 這樣的處理很難讓人理解 如果是用 struct 的方法時,直接用 MSG_HEADER aTest; aTest.nMsgType = aNewValue; 很容易讓人理解 nMsgType 就是最右邊的 byte!! 這種寫法通常用在對於每個 byte(甚至是每個 bit), 需要精確的控制,但又需要讓人容易理解時。 PS: 該 struct 對於 bit 的控制與 CPU 有相關, LSB 的 CPU(ex: x86) 就是跟上面的例子一樣;如果 CPU 是 MSB 的話, nMsgType 會是指最左邊的 byte!!
hwmike6979
一般會員


發表:3
回覆:6
積分:1
註冊:2005-07-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-16 08:55:26 IP:61.218.xxx.xxx 未訂閱
謝謝windblown, 透過您的說明, 我已經明白這樣宣告的用意了!
系統時間:2024-05-04 1:15:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!