国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 幫助中心 > 正文

匯編語言位向量(位映射)的實現

2024-07-09 22:43:15
字體:
來源:轉載
供稿:網友

有些應用控制的對象是從一個有限全集中選出來的一組項目。就像公司里的雇員,或者氣象監測站的環境讀數。在這些情景中,二進制位可以代表集合成員。

與 Java HashSet 用指針或引用指向容器內對象不同,應用可以用位向量(或位映射)把一個二進制數中的位映射為數組中的對象。

如下例所示,二進制數的位從左邊 0 號開始,到右邊 31 號為止,該數表示了數組元素 0、1、2 和 31 是名為 SetX 的集合成員:

SetX = 10000000 00000000 00000000 00000111

(為了提供可讀性,字節已經分開。)通過在特定位置與 1 進行 AND 運算,就可以方便地檢測出該位是否為集合成員:

mov eax,SetX
and eax, 10000b   ;元素[4]是 SetX 的成員嗎?

如果本例中的 AND 指令清除了零標志位,那么就可以知道元素[4]是 SetX 的成員。

1) 補集

補集可以用 NOT 指令生成,NOT 指令將所有位都取反。因此,可以用下面的指令生成上例中 SetX 的補集,并存放在 EAX 中:

mov eax,SetX
not eax                  ;Setx的補集

2) 交集

AND 指令可以生成位向量來表示兩個集合的交集。下面的代碼生成集合 SetX 和 SetY 的交集,并將其存放在 EAX 中:

mov eax,SetX
and eax,SetY

SetX 和 SetY 交集生成過程如下所示:

        1000000000000000000000000000111 (SetX)AND    1000001010100000000011101100011 (SetY)――――――――――――――――――――-        1000000000000000000000000000011 (交集)

很難想象還有更快捷的方法生成交集。對于更大的集合來說,它所需要的位超過了單個寄存器的容量,因此,需要用循環來實現所有位的 AND 運算。

3) 并集

OR 指令生成位圖表示兩個集合的并集。下面的代碼產生集合 SetX 和 SetY 的并集,并將其存放在 EAX 中:

mov eax,SetX
or eax,SetY

OR 指令生成 SetX 和 SetY 并集的過程如下所示:

       1000000000000000000000000000111 (SetX)OR    1000001010100000000011101100011 (SetY)――――――――――――――――――――-       1000001010100000000011101100111 (并集)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網之家。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 准格尔旗| 阿拉善盟| 楚雄市| 通道| 全州县| 司法| 开江县| 永城市| 长兴县| 毕节市| 宜兰县| 辛集市| 宜春市| 常德市| 邛崃市| 綦江县| 高密市| 枣阳市| 建宁县| 乾安县| 个旧市| 浦东新区| 曲麻莱县| 汉川市| 西青区| 建德市| 抚宁县| 南康市| 滁州市| 九龙县| 海晏县| 永宁县| 富蕴县| 南郑县| 正阳县| 安泽县| 岳阳市| 耿马| 宿松县| 牡丹江市| 始兴县|