我如何否定二进制数中的单个数字?
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
假设我有一个二进制数,例如: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