Bitmask

di il
1 risposte

Bitmask

Ciao a tutti,
sono nuovo di questo forum e vorrei chiedervi qualche suggerimento su come risolver al meglio questo esercizio:


//*********************************************************************************************************
Compito
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.
Nel nostro esempio sopra, la dimensione della parola era di 8 bit e volevamo estrarre la metà più significativa o i 4 bit più a sinistra.
Tutte le dimensioni delle parole fornite saranno pari.

//*********************************************************************************************************
//implementazione codice
class Challenge {
public static int highOrderBitmask(int wordSize) {

return 0;
}
}

//test
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.Arrays;
public class HighOrderBitmaskTests {
@Test
public void twoBits() {
assertEquals(2, Challenge.highOrderBitmask(2));
}
@Test
public void fourBits() {
assertEquals(12, Challenge.highOrderBitmask(4));
}
@Test
public void eightBits() {
assertEquals(240, Challenge.highOrderBitmask(8));
}
}


//*********************************************************************************************************
//esempio
Quando si lavora con i numeri binari, è possibile utilizzare le maschere di bit per attivare/disattivare determinati bit.
Ad esempio, se prendiamo la rappresentazione binaria del valore decimale 220 (1101 1100) e volessimo estrarre i 4 bit più alti, potremmo usare una maschera di bit con l'operazione booleana AND:

1101 1100 (220)
AND 1111 0000 (240)
_________
1101 0000 (208)

In parole povere, 220 AND 240 è 208. 240 funge da nostra maschera di bit mentre 208 è il valore dei bit di ordine superiore memorizzati dalla rappresentazione binaria del valore decimale 220.

1 Risposte

  • Re: Bitmask

    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
Devi accedere o registrarti per scrivere nel forum
1 risposte