使用vc經常會碰到使用makeword,loword,lobyte等的情況,那麼分析一下吧!
一.型別解析符(byte,word,dword)
學過彙編應該知道,乙個資料過來了,其到底代表什麼,需要我們自己指定,我們可以指定其讀取方式是位元組,字,或雙字,如下:
dword dw = 0xffaabbcc; //這是乙個32位的值
dword dw1 = word(dw); //輸出 0x0000bbcc
word dw1 = word(dw); //輸出 0xbbcc
dword dw2 = byte(dw); //輸出 0x000000cc
byte dw2 = byte(dw); //輸出 0xcc
dword dw3 = dword(dw); //輸出 0xffaabbcc
二.例項解析
#define makeword(a, b) ((word)(((byte)(((dword_ptr)(a)) & 0xff)) | ((word)((byte)(((dword_ptr)(b)) & 0xff))) << 8))
#define makelong(a, b) ((long)(((word)(((dword_ptr)(a)) & 0xffff)) | ((dword)((word)(((dword_ptr)(b)) & 0xffff))) << 16))
#define loword(l) ((word)(((dword_ptr)(l)) & 0xffff))
#define hiword(l) ((word)((((dword_ptr)(l)) >> 16) & 0xffff))
#define lobyte(w) ((byte)(((dword_ptr)(w)) & 0xff))
#define hibyte(w) ((byte)((((dword_ptr)(w)) >> 8) & 0xff))
這是在windef.h中的一段定義,原封不動。
(注:x:代表原值)
1. (dword_ptr)(a) //把a當作雙字讀
(dword_ptr)(a)) & 0xff //把a與0x000000ff與,即把前面的24位全部遮蔽掉了,去了最後的乙個位元組的內容
((byte)(((dword_ptr)(a)) & 0xff) //作為位元組來讀,此時輸出應該是:0x000000xx
(word)(((byte)(((dword_ptr)(a)) & 0xff) //作為字來讀,此時同樣: 0x000000xx
(((byte)(((dword_ptr)(b)) & 0xff))) << 8 //b在被砍成最後乙個位元組以後,又向左移了8位,成為: 0x0000xx00
((word)(((byte)(((dword_ptr)(a)) & 0xff)) | ((word)((byte)(((dword_ptr)(b)) & 0xff))) << 8)) //結果很清楚了,最後結果就是: 0x0000***x
例: word wd = makeword(255,0); //輸出 0x00ff
總結:a,b被作為位元組量對待,多餘的都會被砍掉,即使a= 0x ffffaabb,最終,其作用的只是最後的bb。
2.同上。
總結:a,b被作為字對待。
3.....
深入解析Python中的集合型別操作符
1 標準型別操作符程式設計客棧 所有的集合型別 成員關係 in,not in 就序列而言,python中的in和not in操作符決定某個元素是否是乙個集合中的成員。集合等價 不等價 等價 不等價被用於在相同或不同的集合之間做比較。兩個集合相等是指,對每個集合而言,當且僅當其中乙個集合中的每個成員同...
介面型別解析
1000 100m一般代表該網路所支援的最高資料傳輸速率為1000mbps。sx代表短波長傳輸 fx代表光纖傳輸 tx代表採用雙絞線傳輸 1000base sx 短波長光纖千兆乙太網 100base fx 光纖 1300nm 快速乙太網 f是光纖單詞fiber光纖的縮寫 100base sx 光纖 ...
float型別解析
浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...