Salve,
esiste un modo efficente per confrontare gli x bit più significativi di due interi senza doverli covnertire e successimente analizzare i bit?
grazie
Salve,
esiste un modo efficente per confrontare gli x bit più significativi di due interi senza doverli covnertire e successimente analizzare i bit?
grazie
Soffrire sempre mollare mai
Non ho capito bene il problema ma puoi testare i bit con l'operatore &
No MP tecnici (non rispondo nemmeno!), usa il forum.
Allora cerco di spiegarmi meglio.
supponiamo di avere due interi
a=12
b=14
vorrei verificare che i primi due bit dei due numeri siano uguali, in questo caso lo sono (12->1100 e 14->1110) mentre se richiedo se i primi 3 bit sono uguali mi dovrebbe ritornare false.
spero di essere stato chiaro.
grazie ancora.
Soffrire sempre mollare mai
Attenzione ... devi essere preciso ... se a e b sono interi a 32 bit i "primi bit" non sono quelli che hai detto tu perchè il dato viene espresso in binario con 32 bit
00000000000000000000000000001100
00000000000000000000000000001110
Quindi devi specificare il numero dei bit che vuoi confrontare ... ad esempio tu parli dei bit 3, 2 e 1
No MP tecnici (non rispondo nemmeno!), usa il forum.
supponiamo di prendere il numero
00000000000000000000000000001100
la parte che a me interessa sono le ultime 4 cifre.....
e di queste 4 cifre sono interessanto alle cifre 11.
Come potrei esprimere tale preferenza a C?
grazie
Soffrire sempre mollare mai
Per ottenere il terzo bit meno significativo, fai una cosa tipo
Per il quarto,codice:int t = n & 4;
Infatti, supponiamo di voler verificare il terzo bit meno significativo di 12:codice:int q = n & 8;
Facendo un and tra tutti i bit di entrambi i due numeri, si ottiene sempre zero in qualsiasi posizione in cui la "maschera" (il 4, nel nostro caso) abbia uno zero. Solo in corrispondenza dei bit a 1 della maschera è possibile ottenere 1, e ovviamente solo nel caso che sia 1 anche il bit del numero che stai controllando.codice:0000000000001100 & [12] 0000000000000100 = [4] ------------------- 0000000000000100
Se ottieni un numero diverso da 0, allora il bit che hai controllato era a 1.
codice:if (numero & 4) { //bit a 1 } else { //bit a 0 }
"Let him who has understanding reckon the number of the beast, for it is a human number.
Its number is rw-rw-rw-."
Puoi anche fare l'and con il valore 12 per ottenere lo stato dei due bit ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
Ah giusto, servono insieme, non ci avevo pensato...
Quindi devi controllare se (n & 12) == 12, giusto?
"Let him who has understanding reckon the number of the beast, for it is a human number.
Its number is rw-rw-rw-."
n & 12
il risultato potrà essere
0
8
4
12
che poi sarebbero le combinazioni
00
01
10
11
corrispondenti per i bit in questione
No MP tecnici (non rispondo nemmeno!), usa il forum.
devo ringraziarvi per le risposte chiare ed esaurienti.
grazie 10000.
Spero di non approfittare troppo se invice volessi sapere il bit della x posizione?
es. 12 --> 1100
voglio sapere quale bit c'è nella terza posizione in questo caso 0
quale bit c'è nella seconda posizione in questo caso 1
GRAZIE ANCORA
Soffrire sempre mollare mai