Estrarre n bit in un numero quasiasi

di il
21 risposte

Estrarre n bit in un numero quasiasi

Salve ragazzi sto tentando di scrivere una funzione che ritorni la variabile x modificata in modo che i suoi n bit, a partire dalla posizione p, risultino uguali ai primi n bit di destra di y, ed i bit rimanenti restino invariati.


ho pensato di andare avanti cominciando a creare maschere ovunque, il problema è già dall'inizio non sò come cominciare a contare i bit per estrarni n partendo dalla posizione p


avevo pensato a 1 cosa del genere


esempio

p=7;

n=3

x=14;

y=5;

dovrei cercare di estrapolare 3 bit da y gli ultimi 3;

estrapolare gli ultimi 3 di x

e sommarli credo voi che dite?? 

il problema mi sorge fin dall'inizio come estrapolo n bit da un numero senza sapere a priori quanti bit devo estrapolare?

21 Risposte

  • Re: Estrarre n bit in un numero quasiasi

    Hai una bella serie di domande ... ma delle precedenti risposte cosa ci dici ?
  • Re: Estrarre n bit in un numero quasiasi

    Eh ti posso rispondere che mi stai insegnato tante cose che non sapevo, ma in un problema del genere non so minimamente come potrei ragionare perché non ho ben capito come applicare maschere in esadecimale ad esempio
  • Re: Estrarre n bit in un numero quasiasi

    Intendevo dire che dovresti completare le discussioni precedenti a cui hai avuto risposta prima di partire con altre discussioni ... solo per chiarezza verso chi ti risponde.

    Venendo al tuo problema con i bit, non mi sembra complesso ma dovresti dare maggiori spiegazioni perché non è chiarissimo ...

    Se x=14 e p=7 cosa vuoi ottenere da x ?

    E che relazione c'è con y e n ?

    Fai un esempio concreto con dei valori numerici di partenza e di arrivo ...
  • Re: Estrarre n bit in un numero quasiasi

    Quello che ho pensato è che èer prima cosa devo isolare n bit di destra di y , successivamente devo contare da x p posti togliere n numeri di x e sostituirli con quelli di y


    esempio

    1110 è 14 (x)
    111 è 7 (y)

    la mia p vale 2 e per ipotesi anche la mia n vale 2

    prendo 7 e ci "stacco " n numeri da destra quindi mi prendo 11

    conto p bit su x e li sostituisco con 11

    quindi diventa 1111

    questo devo fare
  • Re: Estrarre n bit in un numero quasiasi

    Sia p che n sono intesi a partire da destra?

    Sia p che n non possono valere 0?

    x e y sono interi a 32 bit?
  • Re: Estrarre n bit in un numero quasiasi

    Si sia p che n sono intesi a partire da destra, n e p non possono valere 0 e x e y sono numeri a lunghezza variabile
  • Re: Estrarre n bit in un numero quasiasi

    x e y sono numeri a lunghezza variabile
    Intendo la grandezza massima di bit ... (sono interi al massimo a 32 bit)
  • Re: Estrarre n bit in un numero quasiasi

    Sisi sono massimo a 32 bit
  • Re: Estrarre n bit in un numero quasiasi

    Per staccare n bit da un numero x partendo da destra puoi fare
    
    #include <iostream>
    
    int main()
    {
    	int x = 10;
    	int temp = x;
    	int pos = 32;
    	int n = 2;
    	for(; pos > 0; pos--)
    	{
    		if(temp & 0x800000000)
    			break;
    		temp <<= 1;
    	}
    	int val = x >> (pos - n);
    	std::cout << val;
    	return 0;
    }
    
    Esempio alla veloce c'è ne sono sicuramente dei migliori
  • Re: Estrarre n bit in un numero quasiasi

    La prima parte la fai così
    
    	int mask;
    	int y=7;
    	int n=2;
    	int vy;
    
    	///
    	mask = 1;
    	if(n==32) 
    		mask = 0;
    	else
    		mask <<= n;
    	mask --;
    	vy = y & mask;
    	///
    
    la seconda parte non è chiarissima ... fai un altro esempio ...
  • Re: Estrarre n bit in un numero quasiasi

    @oregon
    bisogna prendere i due bit + significativi non quelli meno. Con altri numeri non funziona. Per esempio prova con y = 114 e n = 2;
  • Re: Estrarre n bit in un numero quasiasi

    Veramente ho capito il contrario ... lui dice
    "n numeri da destra"

    "sia p che n sono intesi a partire da destra"
  • Re: Estrarre n bit in un numero quasiasi

    Retifico:
    Son io che non ci ho capito un tubero Ho preso i bit a partire da sx
  • Re: Estrarre n bit in un numero quasiasi

    Allora io la creazione della maschera LUNGA n e a partire dalla posizione p l'ho ideata così:
     for(i=0;i<n;++i)
            mask|=(1<<p+i);
    
    così facendo ho la maschera creata e già shiftata al posto giusto


    adesso l'ho messo in OR con il secondo numero così da "selezionare solo i bit giusti"

    prendiamo caso che il primo numero è 111.0111.00

    il secondo è 101.1011.00


    devo modificare la parte centrale del primo numeero facendolo diventare :


    111.1011.00

    interessandomi solo della parte centrale perché ho fatto una copia di x che mi permette di salvare i bit prima e dopo quelli modificati quindi il mio problema è che non riesco ad andare avanti perché sia con and con or o con xor operando il primo e il secondo numero la parte centrale non è uguale al secondo numero ho pensato anche che potrei provare ad azzerare la parte centrale facendolo diventare 111.0000.00 e poi sommarci il secondo numero , il problema è che rischio di perdere la generalità di un problema per via di un caso isolato
Devi accedere o registrarti per scrivere nel forum
21 risposte