型別解析符(BYTE,WORD,DWORD

2021-06-28 02:08:29 字數 1605 閱讀 9582

使用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使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...