通常的方式来访问一个位在一个数是做一个数字和掩码之间的AND操作。例如
number = 0xFFAA0055; // an example
bit17 = 1 << 17; // counting bit0 as the least significant bit
bit17set = number & bit17;
bit17set将是true
如果位17是1
,因为只有这样,逻辑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];
}
请用一个例子阐明了“当'address'的你的问题,是'this',和'别的东西'是'that',我想'index'是'something''类型...现在不知道你在问什么...'index_MSB'和'index_LSB'的值是什么? – Floris 2013-02-13 01:34:16