gpt4 book ai didi

bit-manipulation - 在两个字节之间的给定点交换位

转载 作者:行者123 更新时间:2023-12-04 06:47:20 25 4
gpt4 key购买 nike

假设我有这两个数字:

x = 0xB7
y = 0xD9

它们的二进制表示是:
x = 1011 0111
y = 1101 1001

现在我想在给定点交叉(GA),比如从位置 4 开始。

预期的结果应该是:
x = 1011 1001
y = 1101 0111

按位,我怎样才能做到这一点?

最佳答案

我只会使用按位运算符:

t = (x & 0x0f)
x = (x & 0xf0) | (y & 0x0f)
y = (y & 0xf0) | t
那将适用于该特定情况。为了使其更具适应性,我将它放在一个函数中,类似于 (伪代码,用 &|! 表示按位“与”、“或”和“非”分别):
def swapBits (x, y, s, e):
lookup = [255,127,63,31,15,7,3,1]
mask = lookup[s] & !lookup[e]
t = x & mask
x = (x & !mask) | (y & mask)
y = (y & !mask) | t
return (x,y)
查找值允许您指定要交换的位。让我们取值 xxxxxxxxxyyyyyyyy对于 y 以及起始位 s 2 和结束位 e 6 个(在这种情况下,位数从左边的零开始):
x        y        s e t        mask     !mask    execute
-------- -------- - - -------- -------- -------- -------
xxxxxxxx yyyyyyyy 2 6 starting point
00111111 mask = lookup[2](00111111)
00111100 & !lookup[6](11111100)
00xxxx00 t = x & mask
xx0000xx x = x & !mask(11000011)
xxyyyyxx | y & mask(00111100)
yy0000yy y = y & !mask(11000011)
yyxxxxyy | t(00xxxx00)

关于bit-manipulation - 在两个字节之间的给定点交换位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com