假设我有一个二进制数字,如: 0 101 0 10 1 01。现在我想要否定第1个第5和第8个数字,将其改为 1 101 1 10 0 01。有算法可以做到这一点吗?如果是这样,它是如何工作的?
答案 0 :(得分:0)
一些pseuocode ..
function negateDigit(num, digit)
if num >> digit & 1 then
return num ^ (pow(2, digit))
else
return num + pow(2, digit)
end
end
基本上这是做什么>
它一直移位,直到指定的数字为第一个数字是指定的数字
比起数字1(删除任何更大的数字)
之后,如果数字存在(这是lua btw),那么它将数字从系统中异或(我想你也可以减去它......)
否则,它会将其添加回
对OP的评论显示,我通过添加检查使其过于复杂,无论翻转状态如何,您都可以使用XOR操作。function negateDigit(num, digit)
return num ^ (1 << digit)
end