我如何否定二进制数中的单个数字?

How would I negate single digits in a binary number?

假设我有一个二进制数,例如:0101010101 .现在我只想否定第 1、5 和 8 位数字,将其更改为 1101110001。有没有算法可以做到这一点?如果是这样,它是如何工作的?

一些伪代码..

function negateDigit(num, digit)
    if num >> digit & 1 then
        return num ^ (pow(2, digit))
    else
        return num + pow(2, digit)
    end
end

基本上这是在做什么>

它一直移位直到指定的数字是第一个数字是所需的指定数字

它比数字加 1(删除任何更大的数字)

之后,如果该数字存在(顺便说一下,这是 lua),那么它会将数字从系统中异或(我想你也可以减去它..)

否则,它会将其添加回

E/ 正如对 OP 的评论所示,我通过添加检查使它过于复杂,无论翻转状态如何,您都可以使用 XOR 操作。

function negateDigit(num, digit)
    return num ^ (1 << digit) 
end