-1

我可以创建任意大小的数组。好的,让我们创建一个布尔数组。所以这是我的问题:我如何处理我的数组的 i(th) 位?

4

2 回答 2

0

伪代码(因为未指定架构):

访问 i(th) 位:

将布尔值视为寄存器中的一组标志:其中 0 = false 和 1 = true

考虑一台 8 位机器:

            76543210
registerA = 00100100
-----------------------

-----------------------
To access 5th bit      : if ((00100100 & 00100000)>>5) == 1: 5th bit is true; else: false
To access 6th bit      : if ((00100100 & 01000000)>>6) == 1: 6th bit is true; else: false
similarly for nth bit  : if (((number)&(1 << n)) >> n) == 1: nth bit is true; else: false
于 2012-10-20T11:06:02.793 回答
0

第一种方式 - 面具:

or byte ptr [array+x], %mask% ; %mask% - any value that 1 byte can hold (i.e.: 40h - 1100 0000, 7th & 8th bit will be set on little-endian architecture)

显然,您可以将更大的掩码与 WORD、DWORD(或 x64 上的 QWORD)一起使用。

第二种方式 - BT*

bts [array], x ; x-th but will be set, previous state will be stored @ CF
于 2012-10-20T15:46:57.943 回答