Un'introduzione agli operatori bit-shift:
primo luogo, abbiamo l'operatore di sinistra-shift, x << n
. Questo sposterà tutti i bit in x
lasciati dagli n
bit, riempiendo i nuovi bit da zero:
1111 1111
<< 3: 1111 1000
Avanti, abbiamo il sottoscritto operatore destra-shift, x >> n
. Questo sposta tutti i bit in x
proprio n, copiando il bit di segno nei nuovi bit:
1111 1111
>> 3: 1111 1111
1000 0000
>> 3: 1111 0000
0111 1111
>> 3: 0000 1111
Infine, abbiamo l'operatore zero riempire shift destro, x >>> n
. Questo sposta tutti i bit in x
proprio n
bit, riempiendo i nuovi bit da zero:
1111 1111
>>> 3: 0001 1111
È inoltre possibile trovare utile il bit-o gestore, x | y
.Ciò confronta i bit in ogni posizione in x
e y
, impostando il bit del nuovo numero sul se fosse su in entrambi x
o y
, fuori altrimenti:
1010 0101
| 1010 1010
---------
1010 1111
si deve solo bisogno dei precedenti operatori per il problema a portata di mano , ma per ragioni di completezza, qui sono gli ultimi due:
il bit a bit-ed esercente, x & y
imposta i bit in uscita a uno se e solo se il bit è attivo sia x
e y
:
1010 0101
& 1010 1010
---------
1010 0000
L'operatore binario-xor, x^y
imposta i bit di uscita a uno se il bit è attivo in un numero o l'altro, ma non entrambi:
1010 0101
^ 1010 1010
---------
0000 1111
Ora, applicando questi alla situazione contingente:
Sarà necessario utilizzare gli operatori di spostamento di bit per aggiungere e manipolare i bit. Iniziare a impostare i bit sul lato destro in base alle loro rappresentazioni di stringa e spostarli. Continua finché non raggiungi la fine di un byte, quindi passa al byte successivo. Diciamo che vogliamo creare una rappresentazione di byte di "1100 1010":
Our byte Target
--------- --------
0000 0000
1100 1010
0000 0001 ^
1100 1010
0000 0011 ^
1100 1010
0000 0110 ^
1100 1010
0000 1100 ^
1100 1010
0001 1001 ^
1100 1010
0011 0010 ^
1100 1010
0110 0101 ^
1100 1010
1100 1010 ^
farò, ovviamente, lasciare a voi per applicare questo al vostro lavoro.
Si parla di una "rappresentazione binaria compressa", quindi si dice di avere un 'String' di 18 caratteri (" 010100111111011000 ") per rappresentare una parola lunga 7 caratteri (" programma "). Sei sicuro di voler dire quello che stai chiedendo? Normalmente avresti quei bit impostati nel numero X di byte (3 in questo caso). –
Cerca "operatori di spostamento dei bit": '>>', '>>>', '<<'. – Kevin
Brian, il messaggio originale ha una dimensione di 56 bit quando viene tradotto in binario, il messaggio codificato è solo di 18 bit. Kevin, la gente continua a dirmelo, ma non riesco ancora a tracciare il collegamento tra l'uso di quegli operatori e la possibilità di tradurre questo in un array di byte. –