pou*_*def 12
阐述Avi的答案:
int i = setbits(0xAB = b10101011, 5, 3, 0xAA = b10101010);
i equals 0x93 = b10010011
Run Code Online (Sandbox Code Playgroud)
说你的i = 0xAB.在二进制文件中,这是:10101011
让我们对每个位位置进行编号.
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 1
Run Code Online (Sandbox Code Playgroud)
最右边的位(最不重要的)是位置"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)
Run Code Online (Sandbox Code Playgroud)
我们如何修改它们?我们正在取代它们.使用另一组3位.来自y的三个最低有效位.
所以这是y:
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 0
Run Code Online (Sandbox Code Playgroud)
并且最右边的位将是位2,1,0或值"010".当然,如果n = 6的值,那么你想要用"101010"替换i中的那6位 - 最右边的6位.
因此,您的任务是从i获取指定的位 - 在本例中为"101" - 并用y中的指定位替换它们 - "010".
如果你这样做,那么你的返回值是
1 0 1 0 1 0 1 0