Aviの答えを説明する:
int i = setbits(0xAB = b10101011, 5, 3, 0xAA = b10101010);
i equals 0x93 = b10010011
あなたの i = 0xAB と言ってください。バイナリでは、これは 10101011 です。
各ビット位置に番号を付けましょう。
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 1
右端のビット (最下位) は位置「0」です。一番左の (最も重要な) 位置は「7」です。
したがって、次の 2 つの値 p と n は、「ビット p から始まる n ビットを変更したい」ということです。したがって、p=5 で n=3 の場合、ビット番号 5 から開始し、合計で 3 ビットを変更します。これはビット 5、4、3 を意味します。この例では「101」です。
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 1
| |
---------
(Modifying these three bits)
それらをどのように変更していますか?それらを交換しています。別の 3 ビットのセット。y の最下位 3 ビット。
だからここにyがあります:
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 0
右端のビットは、ビット 2、1、0 または値「010」になります。もちろん、n の値が 6 の場合、i の 6 ビットを "101010" (右端の 6 ビット) に置き換える必要があります。
したがって、あなたの仕事は、i から指定されたビット (この場合は「101」) を取得し、それらを y の指定されたビット (「010」) に置き換えることです。
これを行うと、戻り値は
1 0 1 0 1 0 1 0