5
這裏我想生成一個位模式來設置n
數字等於1
從位置p
開始。 位數從0 to 31
開始編號。 以下是我所做的。使用按位運算符生成特定的位模式
int bitPattern(int n, int p) {
int hex, num1, num2;
hex = 0x80000000;
num1 = (hex >> (31 - p));
num2 = (hex >> (31 - (n+p)));
return num1^num2;
}
實施例:
bitPattern(6, 2) should return
..000011111100
具有較少運營商的任何替代解決方案?
當'n + p> 31'時,您正在調用未定義的行爲。如果保證永遠不會出現這種情況,那麼您仍然有實現定義的行爲,正確地移動一個負數。但是如果你不害怕UB,那麼'((1 << n)-1)<< p'呢? –
@DanielFischer在我的問題中'(n + p)'不會超越31.並且很容易識別太... – noufal
無論如何,如果你只關心位,我建議使用無符號類型,然後'((1 << n)-1)<< p'是安全的,除非'n'或'p'是負數或大於或等於該類型的寬度。 –