详解阿维的回答:
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”。
所以接下来的两个值 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 中的三个最低有效位。
所以这里是 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