Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    C++: come inserire un bit a destra di una stringa???

    Ciao a tutti,
    Mi chiedevo se qualcuno poteva essere così gentile da aiutarmi a risolvere un piccolo problema.
    In pratica ho creato un listato istruzioni che mi permette di agire su un registro a 8 bit tramite la sua parità: calcola il numero di 1 presenti, verifica se sono in numero pari o dispari... Ora, l'unica cosa mancante è l'aggiunta del corrispettivo nono bit a destra del registro (1 se il numero di bit=1 nel registro sono in numero dispari, 0 per il caso di un numero pari di bit=1).
    LA mia domanda è: quale istruzione mi permette di aggiungere questo bit?
    pensavo allo shift, ma penso che >> mi permeyta di muovei tra i bit e non di aggiungerli!

    grazie in anticipo!!!
    "Il momento è arrivato: quando le stelle si scioglieranno in mille petali, solo allora saprò cosa significa essere Serenity. Mi è stato fatto dono dell’Eternità, stelle e luna non sono mai state così luminose. Sono stata avvolta nella carezza evanescente dell’amore, l’amore eterno che donano i petali di stelle”.

  2. #2
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Fai lo shift e poi, se è il caso, sommi 1 al risultato!

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ponendo che il tuo registro sia abbastanza grande da contenere 9 bit (io ho ecceduto e ho usato un int)
    per settare a 1 un qualunque bit (in questo caso il nono) puoi usare:

    codice:
    #include <stdio.h>
    
    int main()
    {
        int maschera = 0;
    
        printf("maschera: %d\n", maschera);
        
        // setto a 1 il nono bit
        maschera |= 1 << 8;
        
        printf("maschera: %d\n", maschera);
    
        return 0;
    }
    Ciao.

  4. #4
    Originariamente inviato da escocat
    Fai lo shift e poi, se è il caso, sommi 1 al risultato!
    Prima di tutto grazie per la risposta ... Allora, se faccio lo shift in questo modo
    ADRESH>>1 ottengo solo che la mia stringa di bit viene shiftata a destra di un unità,esempio:
    se il mio ADRESH=00000011 , usando lo shift di un bit ottengo il nuovo ADRESH=00000001. Come vedi sempre 8 bit rimangono... E non posso sommare 1 al risultato, perderebbe di significato!

    Non so come aggiungere proprio un nono bit
    "Il momento è arrivato: quando le stelle si scioglieranno in mille petali, solo allora saprò cosa significa essere Serenity. Mi è stato fatto dono dell’Eternità, stelle e luna non sono mai state così luminose. Sono stata avvolta nella carezza evanescente dell’amore, l’amore eterno che donano i petali di stelle”.

  5. #5
    Originariamente inviato da c0der
    Ponendo che il tuo registro sia abbastanza grande da contenere 9 bit (io ho ecceduto e ho usato un int)
    per settare a 1 un qualunque bit (in questo caso il nono) puoi usare:

    codice:
    #include <stdio.h>
    
    int main()
    {
        int maschera = 0;
    
        printf("maschera: %d\n", maschera);
        
        // setto a 1 il nono bit
        maschera |= 1 << 8;
        
        printf("maschera: %d\n", maschera);
    
        return 0;
    }
    Ciao.


    Ciao e grazie mille per la risposta ... allora,io sto gestendo LA COMINUCAZIONE SERIALE 8-E-1 di un uC, il PIC18F4450; il mio professore vuole che venga calcolato il bit di parità; nel flag del trasmettitore e ricevitore ho già attivato la trasmissione e ricezione con il 9bit di parità.
    Quindi, dopo vari passaggi il mio registro ADRESH dovrebbe avere 9 bit, giusto?
    Con questo tuo metodo maschera |= 1 << 8; in poche parole che succede? Perchè stai facendo la OR? Scusa le mie domande stupide
    "Il momento è arrivato: quando le stelle si scioglieranno in mille petali, solo allora saprò cosa significa essere Serenity. Mi è stato fatto dono dell’Eternità, stelle e luna non sono mai state così luminose. Sono stata avvolta nella carezza evanescente dell’amore, l’amore eterno che donano i petali di stelle”.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Originariamente inviato da Svarowsky_girl
    Quindi, dopo vari passaggi il mio registro ADRESH dovrebbe avere 9 bit, giusto?
    Questo registro ADRESH quanti bit è? attualmente come lo scrivi?

    Con questo tuo metodo maschera |= 1 << 8; in poche parole che succede?
    Qui ti ho solo fatto vedere come settare un qualunque bit di un intero a 1.
    1) Con lo shift ottengo un numero che ha il bit settato a 1 che mi interessa, ad esempio 1 << 8 è 256 ossia 100000000 in binario.
    2) Facendo l'OR tra 256 e maschera => ottengo uno maschera con il nono bit a 1.

    Se volevo settare il 13esimo bit scrivevo:
    maschera |= 1 << 12;

  7. #7
    Originariamente inviato da c0der
    Questo registro ADRESH quanti bit è? attualmente come lo scrivi?


    Qui ti ho solo fatto vedere come settare un qualunque bit di un intero a 1.
    1) Con lo shift ottengo un numero che ha il bit settato a 1 che mi interessa, ad esempio 1 << 8 è 256 ossia 100000000 in binario.
    2) Facendo l'OR tra 256 e maschera => ottengo uno maschera con il nono bit a 1.

    Se volevo settare il 13esimo bit scrivevo:
    maschera |= 1 << 12;
    AlLora, in pratica il registro ADRES (16bit) è un registro dove memorizzo il risultato di una conversione A/D edè suddiviso in ADRESH e ADRESHL , ognuno da 8bit, rispettivamente registro dei bit al ata priorità e bassa. A me interssa l'adresh, infatti ho inserito al suo interno il risultato della conversione trasmessa.
    Poichè ho attivato il flag del 9bit, allora avro' il suo contenuto a 9bit (spero sia giusto).

    il registro è scritto semplicemente ADRESH, lo riconosce il microcontrollore.

    Per quanto riguarda la tua maschera...quindi una volta calcolata questa maschera come la applico all'ADRESH? SOMMANDOLA?
    "Il momento è arrivato: quando le stelle si scioglieranno in mille petali, solo allora saprò cosa significa essere Serenity. Mi è stato fatto dono dell’Eternità, stelle e luna non sono mai state così luminose. Sono stata avvolta nella carezza evanescente dell’amore, l’amore eterno che donano i petali di stelle”.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Prendendo ad esempio qui:
    http://www.microcontroller.it/T&T/PIC/ADRESHL.htm
    adresh e adresl sono contigui.

    Parlare del nono bit ha senso se li intendi contigui, perché essendo ciascuso di 8 bit non avrebbe senso di parlare del nono bit.

    Rispetto al disegno nell'esempio tu come li scrivi i dati?

  9. #9
    Originariamente inviato da c0der
    Prendendo ad esempio qui:
    http://www.microcontroller.it/T&T/PIC/ADRESHL.htm
    adresh e adresl sono contigui.

    Parlare del nono bit ha senso se li intendi contigui, perché essendo ciascuso di 8 bit non avrebbe senso di parlare del nono bit.

    Rispetto al disegno nell'esempio tu come li scrivi i dati?
    Sì, scusami, i registri sono contigui... ciascuno da 8 bit, ma contigui.
    Nell'esercizio mi è richiesto espressamente di inserire nell'ADRESH gli 8 bit piu significativi della conversione A/D, e di calcolare il bit di parità sul registro ADRESH .
    "Il momento è arrivato: quando le stelle si scioglieranno in mille petali, solo allora saprò cosa significa essere Serenity. Mi è stato fatto dono dell’Eternità, stelle e luna non sono mai state così luminose. Sono stata avvolta nella carezza evanescente dell’amore, l’amore eterno che donano i petali di stelle”.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Questo bit di parità lo dovrai allora scrivere in ADRESL, visto che gli 8 bit dell'ADRESH li utilizzi già.

    - se devi scrivere 1 nel bit meno significativo di ADRESL:
    ADRESL = 1
    - se devi scrivere 1 nel bit più significativo di ADRESL:
    ADRESL = 128
    (128 = 10000000 in binario)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.