通常的方式來訪問一個位在一個數是做一個數字和掩碼之間的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