일반적인 방법은 할 것이다 숫자와 마스크 사이의 AND 연산. 비트 17 1
경우에만 다음 AND
논리 0이 아닌 결과를 생성하기 때문에, 예를 들어
number = 0xFFAA0055; // an example
bit17 = 1 << 17; // counting bit0 as the least significant bit
bit17set = number & bit17;
bit17set는 true
될 것이다. 여러 비트에 관심이 있다면
, 당신은 단순히 전에 마스크를 요약 할 수 있습니다 :
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'가'이다, 'else'는'that'이고,'index'가'something'이되기를 원합니다 ... type ... 지금 당신이 묻고있는 것이 확실하지 않습니다 ...'index_MSB'와'index_LSB'의 값은 무엇입니까? – Floris