Natknąłem się na to wyzwanie na Edabit i nie mogłem znaleźć tego rozwiązania operacji bitowej.
notNotNot = (a,b) => !!(a%2 >> b)
Wyzwanie:
//Something which is not true is false, but something which is not not true is true!
//Create a function where given n number of "not", evaluate whether it's true or false.
//Examples:
notNotNot(1, true) ➞ false
// Not true
notNotNot(2, false) ➞ false
// Not not false
notNotNot(6, true) ➞ true
// Not not not not not not true
Zrobiłem badania, które ten operator:
Przesuwa w prawo, popychając kopie najbardziej wysuniętego w lewo bitu od lewej i pozwól, aby bity najbardziej wysunięte w prawo wypadły.
Wydaje mi się, że zrozumiałem (np. To 5 >> 1samo, 0101 >> 1co ocenia 0010), ale nie widzę, jak to działa z wartością logiczną? Wiem, że trueocenia 1i falsedo 0.
notNotNot(2, true): powróci false, ale nieprawda ( !!true) powinna być true...
false należy rozstrzygnąć true.
notNotNot = (a,b) => !!((a%2)^b)zamiast tego ...
(a, b) => !!((a + b) % 2)?
true=1(dziesiętny) =01(dwójkowy) przesunięty w lewo o jeden spowoduje10binarny lub2dziesiętny.