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…