访问数字中的位的常用方法是在数字和掩码之间进行 AND 操作。例如
number = 0xFFAA0055; // an example
bit17 = 1 << 17; // counting bit0 as the least significant bit
bit17set = number & bit17;
true
如果第 17 位是,则bit17set 将是1
,因为只有这样,逻辑才会AND
产生非零结果。
如果您对多个位感兴趣,您可以在 AND 之前简单地将它们的掩码相加:
bit6 = 1 << 6;
bit6or17 = bit6 + bit17;
bit6or17set = number & bit6or17;
当您想要从 MSB 到 LSB 的地址位时,最简单的操作是:
temp = number >> LSB; // this shifts LSB numbers to the right
answer = temp & ((1<<(MSB-LSB+1) - 1); // a mask of MSB-LSB bits
您当然可以将这两者结合起来:
int index = ((address >> index_LSB) & (1<<(index_MSB - index_LSB+1)-1)).to_ulong();
注意:以上所有内容都假设“正常”数字,并且“按常规”存储位。如果您address
以上述方法无法访问的方式包含位,则可以执行以下操作:
int ii, index=0;
for(ii=index_MSB; ii>= index_LSB; ii--) {
index = (index << 1) + address[ii];
}