0

My discrete math tells me that negate every bit of a binary number is equivalent to XOR it with 1. That is:

~1010 === 0101
1010 XOR 111 = 0101

But this doesn't hold in javascript:

~123 === -124
123 ^ 1 === 122

Why?

Boyang
  • 2,322
  • 5
  • 22
  • 47

1 Answers1

2

1 is not binary 111

Negating every bit of a number is equivalent to XOR every bit with 1, i.e., with a number of equal size where all bits are 1.

For a single byte, you'd want to xor with binary 11111111 which equals to decimal 255, not 1. Decimal 1 is binary 00000001, so in a bitwise XOR you're flipping only the last bit.

Peteris
  • 2,736
  • 2
  • 22
  • 36