Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577

    [C] modificare i bit di un byte

    ciao,
    devo leggere un byte di cui non conosco il valore e mettere a 1 i bit che mi vengono passati indipendentemente se sono già a 1.

    Mi è venuto in mente di fare una OR

    byteletto=10000000
    bitDaMettereAuno=3

    risultato=10000100

    10000000
    00000100
    ----------
    10000100

    Se invece voglio mettere un bit a zero faccio una AND con 255


    10000000
    11111111
    ----------
    10000000

    è corretto?

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Per quanto riguarda l'or è corretto...
    Un and con 255 ( 1111 1111 ) lascia invariato il numero...
    Casomai devi fare un and ~(1<<(nbib-1))
    codice:
    #include <stdio.h>
    
    void printBit(unsigned char c) {
        int i;
        for(i = 7; i >= 0; --i) {
            printf("%d", (c>>i) & 1);
        }
        printf("\n");
    }
    
    int main(void) {
        const int nbit1 = 3;
        const int nbit2 = 7;
        unsigned char c = 0;
        printBit(c);
        c |= (1u<<(nbit1-1));
        c |= (1u<<(nbit2-1));
        printBit(c);
        c &= ~(1u<<(nbit1-1));
        printBit(c);
        return 0;
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    scusa intendevo rimettere a zero il bit 3

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Serve un and con ( 1111 1011 ) che puoi ottenere come ti ho mostrato sotto...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    ops, ho visto l'errore

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.