-1

Let's say I have a binary number like: 0101010101. Now I want to negate only the 1st 5th and 8th digit to change it to 1101110001. Is there an algorithm to do this? If so, how does it work?

1 Answers1

0

Some pseuocode..

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

Basically what this is doing>

It bit shifts all the way untill the specified digit is the first digit is the specified digit desired

It than ands the number by 1 (removing any greater digits)

After that, if the digit exists (this is lua btw), than it XORs the digit out of the system (i suppose you could just subtract it too..)

Else, it adds it back in

E/ as the comment to OP showed, I overcomplicated it by adding the check, you can just use the XOR operation regardless of the flip state.

function negateDigit(num, digit)
    return num ^ (1 << digit) 
end
Arhowk
  • 901
  • 4
  • 11
  • 22