Javascript Nonsense
Saw this online and then thought about it more and it cuts to the representation of numbers in bytes in binary quite clearly.
Given that you have two numeric variables how do you swap the values?
let firstNumber = 1;
let secondNumber = 2;Output
> let firstNumber = 1
> let secondNumber = 2
> firstNumber
1
> secondNumber
2Introduce a variable
let tempNumber = firstNumber;
firstNumber = secondNumber;
secondNumber = firstNumber;Output
> let firstNumber = 1
> let secondNumber = 2
> let tempNumber = firstNumber;
> firstNumber = secondNumber;
> secondNumber = firstNumber;
> secondNumber = tempNumber
> firstNumber
> 2
> secondNumber
> 1Implict swap with an Array
let firstNumber = 1
let secondNumber = 2
[firstNumber, secondNumber] = [secondNumber, firstNumber]This technique leverages destructuring assignment
Output
> [firstNumber, secondNumber] = [secondNumber, firstNumber]
> firstNumber
2
> secondNumber
1Bitwise XOR
let firstNumber = 1
let secondNumber = 2
firstNumber ^= secondNumber
secondNumber ^= firstNumber
firstNumber ^= secondNumberOutput
> firstNumber ^= secondNumber
> secondNumber ^= firstNumber
> firstNumber ^= secondNumber
> firstNumber
2
> secondNumber
1Why does that last one work? Well because the number is stored in bytes and the bytes are composed of bits. The representation of 1 = 00000001 standard 8 bit byte and 2 = 00000010
Now doing an exclusive or XOR operation which means only 1 bit can be on or off when combined
| Input 1 | Input 2 | Output |
|---|---|---|
| 1 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
Going to use 4 bit nibbles for following binary math instead of longer 8 bit bytes above
So 1 XOR 2 = 3
0001
0010
----
0011Then 2 XOR 3 = 1
0010
0011
----
0001Then 3 XOR 1 = 2
0011
0001
----
0010This solution seems insightful to me because it gets to the core of how data is bound by the base abstraction (this abstraction is pushed up from the physical legacy hardware of on/off switches)