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

时间:2015-07-21 22:37:21

标签: binary logic

假设我有一个二进制数字,如: 0 101 0 10 1 01。现在我想要否定第1个第5和第8个数字,将其改为 1 101 1 10 0 01。有算法可以做到这一点吗?如果是这样,它是如何工作的?

1 个答案:

答案 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