2013-10-02 156 views
1

給定兩個整數; sizeoffset,我將如何去生成具有以下屬性的位掩碼;生成位掩碼

MSD    LSD 
1111 1111 0000 1111 
     ^^ 
size = 4 -| | 
      | 
offset = 4 -| 

編輯;這似乎是工作(找到了解決辦法,詢問後)

((1 << size) - 1) << offset; 
+0

'((1 << size) - 1)<< offset'是否產生你想要的補碼?另外,將'size = 32'和'offset = 0'(假設爲32位int)用於未定義的行爲 – Praetorian

+0

它的確如此,但這只是簡單地做補充才能得到真實的東西。我的大小永遠不會是完整的東西,有一個static_assert(現在是)。 – Skeen

+0

@markgz:我標記問題C++ 11的原因不是由於相關性,而是由於我願意使用C++ 11。 – Skeen

回答

1

由於這個問題被標記爲C++,我將提供一個基於STL的解決方案:

bitset<NUM_BITS> bs(0); 
bs = ((bs.flip() << size).flip() << offset).flip(); 

相同的代碼分成幾行:

bitset<NUM_BITS> bs(0); 
bs.flip(); 
bs <<= size; 
bs.flip(); 
bs <<= offset; 
bs.flip(); 

性能的考慮到讀者。