我寫了一個函數,該函數應該從unsigned int
中提取不穩定的位集。 我想爲此使用蒙版。我不確定定義此類蒙版的最佳方法是什麼。 例如,我需要提取位6:14。因此,我需要將掩碼定義爲111111111 << 6
。 我的問題是我不能使用boost或類似的東西,標準的c/C++不知道使用二進制數字。 什麼是可能做的是使用111111111作爲2^10-1.I我不知道 - 這是最好的(最優雅的)解決方案。任何建議?定義掩碼的最佳方式
1
A
回答
1
只需使用0x1FF << 6
(如果你想111111111 << 6
)或0x3FF << 6
(如果你想2^10-1 < < 6)。這比你的二進制文件更清晰 。正如Jerry Coffin指出的那樣,通過使用1 << 10
可以很容易地得到2^10,但我不相信這比使用十六進制更清晰。 (對於這個問題, 在某些情況下,0x7FC00
可能非常清楚,它具有 的優點,您可以直觀地看到單詞中的位爲 的位置,並且如果您有十六進制 轉儲,則更容易將它們選出。 )
3
大多數人都表示口罩,如0xFF時的0x0A等
1
2
讓我們先試着做一堆。
二進制N序列的一個屬性是,就像十進制中的一串九進制一樣,如果給它添加一個序列,就會得到一個後接N個零的序列。我們可以使用反函數,事實是如果從一箇中減去一個,然後再加上N個零,就可以得到一個N個序列,來做到這一點。
一個跟着N個零是隻有1右移N個位置。
template <typename Uint>
Uint zigamorph(int n) { // http://catb.org/jargon/html/Z/zigamorph.html
return 1 << n - 1; // same as 2^n - 1 :)
}
武裝與任何長度的zigamorphs,你可以很容易地通過使用逐,現在讓你從任何值所需的位。
template <typename Uint>
Uint mask_bits(Uint value, int first_bit, int last_bit) { // both inclusive?
return value & zigamorph<Uint>(last_bit-first_bit+1);
}
相關問題
- 1. 用cookie定義類的最佳方式
- 2. 最佳編碼方式
- 3. 定義自定義授權策略的最佳方式
- 4. 最佳方式是在Perl定義(0和「」的定義)
- 5. 用掩碼RegEx正則表達式定義小數最大值
- 6. 知道位數的掩碼創建的最佳方式是什麼?
- 7. 最佳方式定期
- 8. 最佳的方式定義由單一的方法
- 9. 爲給定輸入生成以下位掩碼的最佳方法?
- 10. 自定義WPF DatePicker掩碼
- 11. 自定義ExtJs4掩碼
- 12. 在jQuery庫中重新定義方法的最佳方式
- 13. 在php中轉換python代碼的最佳方法用於SNMP VLAN掩碼的位掩碼計算
- 14. 轉義字符的最佳方式
- 15. 在DataFrame上定義自定義方法的最佳方式是什麼?
- 16. 摺疊此代碼的最佳方式?
- 17. 最佳的URL編碼方式?
- 18. 記錄python代碼的最佳方式
- 19. 訂購代碼的最佳方式
- 20. 代碼Top_Hits聚合的最佳方式
- 21. 最佳方式
- 22. 最佳方式
- 23. 最佳方式
- 24. 最佳方式
- 25. 最佳方式
- 26. 最佳方式
- 27. 最佳方式
- 28. 最佳方式
- 29. 最佳方式
- 30. 最佳方式
問題不夠清楚。不要只告訴我們面具,告訴我們關於真正的問題。 – Nawaz
您可以使用用戶定義的字符串文字。最近有大量的[類似的問題](http://stackoverflow.com/questions/14220217/)。 –
http://stackoverflow.com/questions/537303/binary-literals? –