2012-09-21 68 views
-3

我試着在C++中的bitset類,我試着用137號作爲例子: 所以,我把它轉換成了二進制數,這給了我10001001。現在,我想切斷MSB並存儲其餘位0001001在另一個位實例中稱爲bitarray,我期待在bitarray中看到它,但它沒有給出正確的值。這可能是什麼問題?我只是想給MSB從137二進制表示的位的其餘部分分裂...這裏是代碼:平臺差異?

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]; 
} 

如果有誰知道我怎麼可以很容易地從第二個元素切片的最後一個元素在bitsetObject數組中,讓我知道。謝謝..

+4

「但它不能做出正確的價值。」 - 我稱之爲「信息不足」。 – Griwes

+0

究竟是什麼價值被返回? –

+0

'if(i == 6)'should really'if(i == 7)'... – 2012-09-21 21:31:28

回答

1

您設置bitarray[0]等於bitsetObject[1],這是0(假設num實際上是137)。

你似乎期望的bitarray毫釐等於1

2

如果你只是試圖讓最顯著設置位重新設置一個新bitset對象,然後考慮以下幾點:

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:這是_exactly_這個代碼的作用。你讀過了嗎?你試過了嗎? – ildjarn

+0

這就是爲什麼我在這裏問。我只需要一種方法來切掉MSB並將剩餘的位存儲在另一個數組中。那麼,我如何切斷MSB並儲存其餘的? – helpdesk