Lekcja prosta, ale musimy przez to przejść. Piszemy one’s complement w JavaScript. Do dzieła.

Zacznijmy od tego, że istnieje taki operator bitowy jak ones complement. W JavaScript też go mamy:

console.log(~6); //-7
console.log(~-6); //5

Niewiele z tego rozumiemy więc dlatego się go uczymy. Odrobinę może rozjaśni dodanie 1 do naszych liczb:

let positive = 6;
let negative = -6;

console.log(~positive + 1); //-6
console.log(~negative + 1); //6

Ok, może to niewiele rozjaśniło, ale jakiś tam wzór zaczyna się formować. Chodzi o to, że ten operator zamienia jedynki na zera a zera na jedynki w bitach.

Napiszmy sobie taką funkcję:

function onesComplement(binArr){

    return binArr.map((n) => {
        return n === 0 ? 1 : 0
    });
}

console.log(onesComplement([0,1,1,0]));
//[ 1, 0, 0, 1 ]
console.log(onesComplement([0,0,0,0]));
//[ 1, 1, 1, 1 ]
console.log(onesComplement([1,1,1,1]));
// [0, 0, 0, 0 ]
console.log(onesComplement([1,0,1,0]));
//[ 0, 1, 0, 1 ]

Chodzi dokładnie o to. O zamianę jedynek z zerami i wice-versa.

Używa się tego w notacji ones compelement. Przykład:

0011 - Zaczyna się od 0? Dodatnia
czyli + 011 
czyli + 3

Ok, niby normalne, to teraz ujemna:

1100 - Zaczyna się od 1? Ujemna, odwróć bity

0011 - oblicz, pamiętaj że ujemna

0011 to 3, ale ujemna, -3

Więcej w następnych lekcjach…