2012-09-21 6 views
-3

C++에서 bitset 클래스를 시험해 보았습니다. 숫자 137을 예로 들었습니다. 그래서 10001001을주는 이진수로 변환했습니다. 이제는 MSB를 잘라서 나머지를 저장하려고했습니다. bitarray라고하는 다른 비트 인스턴스의 0001001 비트와 나는 비트 어레이에서 그것을 볼 것을 기대했지만 올바른 값을 제공하지 못했습니다. 무엇이 문제 였을까요? 누군가가 내가 쉽게 마지막 요소로 두 번째 요소에서 슬라이스 수있는 방법을 알고있는 경우플랫폼 차이가 있습니까?

bitset<8> bitarray; 

bitset<8> bitsetObject(num); 
int val = bitsetObject.size(); 

for (int i = 0; i <= (val - 1); i++) 
{ 
    if (i == 6) 
     break; 
    else 
     bitarray[i] = bitsetObject[i + 1]; 
} 

: 난 그냥 137 바이너리 표현으로 비트의 나머지 부분에서 MSB를 분할하려고했다 ... 여기에 코드입니다 bitsetObject 배열에서 알려주세요. 감사합니다 ...

+4

는 "하지만 올바른 가치를 부여하지 않았다." 나는 이것을 "충분하지 않은 정보"라고 부른다. – Griwes

+0

반환되는 값은 무엇입니까? –

+0

'if (i == 6)'이 실제로'if (i == 7)'이어야합니다 ... ... –

답변

1

bitsetObject[1]과 같으며 0이됩니다 (num은 실제로 137 임).

당신은 방금 가장 중요한 설정 비트 리셋 새로운 bitset 개체를 만들려고 노력하는 경우 bitarray 최소한의 비트가 1

2

에 동일하게 기대하는 것, 다음 사항을 고려하십시오

template<std::size_t N> 
std::bitset<N> strip_mssb(std::bitset<N> bitarray) 
{ 
    for (std::size_t i = bitarray.size(); i--;) 
     if (bitarray[i]) 
     { 
      bitarray.reset(i); 
      break; 
     } 
    return bitarray; 
} 

Online demo.

+0

나는 그것을 재설정하려고하지 않습니다. 난 그냥 MSB를 슬라이스하고 다른 배열에 나머지 비트를 저장할 싶어요. – helpdesk

+0

@henry :이 코드가하는 것이 _ 정확히 _입니다. 읽어 보셨습니까? 너 해봤 어? – ildjarn

+0

그래서 내가 여기서 묻습니다. MSB를 잘라내어 나머지 비트를 다른 배열에 저장하는 방법 만 필요합니다. 그래서, 어떻게 MSB에서 잘라내어 나머지는 저장합니까? – helpdesk