whisky90 ha scritto:
Scriviamo una funzione chiamata highOrderBitmask che, quando viene data una dimensione della parola in bit, ci restituirà il valore decimale per la maschera di bit di cui avremo bisogno per estrarre i bit di ordine superiore da una parola della stessa dimensione in bit.
assertEquals(2, Challenge.highOrderBitmask(2));
assertEquals(12, Challenge.highOrderBitmask(4));
assertEquals(240, Challenge.highOrderBitmask(8));
Quale è quindi il dubbio o problema? Per farlo, bastano poche operazioni sfruttando
anche l'operatore di shift a sinistra.
(si può fare in diversi modi, effettivamente, efficienti o meno ..)
Per una soluzione "efficiente", ecco qualche indizio.
Se fai (visto in binario) una sottrazione tra due numeri dove ciascuno contiene UN SOLO "1", ottieni una bitmask di n bit contigui.
È una tecnica molto nota nei sistemi digitali.
Es.
0001000000000000 -
0000000000010000 =
------------------
0000111111110000