2012-02-09 2 views
1

私は、以下を行う必要がある部分に苦しんでいます: 数字X(Say 10101010)と数字Y(Say 1110)と2つの位置変数i、j(Say i = 1、j = 4)の場合、Xのすべてのビットをiからjに設定することです。 上記の例では、答えは101 | | 0。XのビットのサブセットをYのものと等価にする方法

私が考えていたものソリューションでした:ここ

1. Right shift X >> i 
3. Run loop from 0 to j-1 
2. if(!(X (lsb)^Y(lsb)), then continue, else X(lsb) = ~X(lsb) 

事は、私は個々のビットを再生する方法がわからないです。

答えて

4
  1. のみゼロビット位置ijにしているマスクを作成〜(2 J + 1から2 I

  2. 結果= (mask & X) | (Y << i)

Pythonの例:

def replace_bits(X, Y, i, j): 
    mask = ~(2**(j+1) - 2**i) 
    return (mask & X) | (Y << i) 

>>> replace_bits(int('10101010', 2), int('1110', 2), 1, 4) 
188 
>>> bin(replace_bits(int('10101010', 2), int('1110', 2), 1, 4)) 
'0b10111100' 
4

2^j - 1は、1番目からj番目のビットが1である番号を示します。

=したがってZ(2^J - 1) - (2^I - 1)は、iからj個のセット1.

に全てのビットが今iビットによってYを左にシフト有します。

X - (X & Z)+ Yが最終回答です。

関連する問題