1
給定兩個整數; size
和offset
,我將如何去生成具有以下屬性的位掩碼;生成位掩碼
MSD LSD
1111 1111 0000 1111
^^
size = 4 -| |
|
offset = 4 -|
編輯;這似乎是工作(找到了解決辦法,詢問後)
((1 << size) - 1) << offset;
給定兩個整數; size
和offset
,我將如何去生成具有以下屬性的位掩碼;生成位掩碼
MSD LSD
1111 1111 0000 1111
^^
size = 4 -| |
|
offset = 4 -|
編輯;這似乎是工作(找到了解決辦法,詢問後)
((1 << size) - 1) << offset;
由於這個問題被標記爲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();
性能的考慮到讀者。
'((1 << size) - 1)<< offset'是否產生你想要的補碼?另外,將'size = 32'和'offset = 0'(假設爲32位int)用於未定義的行爲 – Praetorian
它的確如此,但這只是簡單地做補充才能得到真實的東西。我的大小永遠不會是完整的東西,有一個static_assert(現在是)。 – Skeen
@markgz:我標記問題C++ 11的原因不是由於相關性,而是由於我願意使用C++ 11。 – Skeen