Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C] Operazioni su bit

  1. #1
    Utente di HTML.it L'avatar di matrics
    Registrato dal
    Jul 2004
    Messaggi
    502

    [C]operazioni su bit

    Riporto un esempio preso da un libro per mostrare l'utilizzo degli operatori per la manipolazione dei bit:
    codice:
    /* getbits: estrae n bit di x a partire dalla posizione p */
    unsigned getbits(unsigned x, int p, int n)
    {
        return (x >> (p+1-n)) & ~(~0 << n);
    }
    Secondo quanto letto l'operazione di shift >> ammette uno shift di tot posizioni con tot non negativo. E fin qui ok.
    Ma ipotizzando di passare alla funzione x,2,5 ottengo uno shift di -2 posizioni
    Poi mi sono fermato con la comprensione del codice e credo che chiederò il vostro aiuto

  2. #2

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Dato che lo shift non può essere negativo, il risultato della prima espressione sarà 0... quindi anche l'intera espressione varrà 0.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it L'avatar di matrics
    Registrato dal
    Jul 2004
    Messaggi
    502
    Originariamente inviato da LeleFT
    Dato che lo shift non può essere negativo, il risultato della prima espressione sarà 0... quindi anche l'intera espressione varrà 0.


    Ciao.

    come fa a diventare 0 da -2 che era?
    è previsto da questa istruzione?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    L'espressione (x >> k), con x qualsiasi e k < 0 da sempre 0 perchè non è possibile shiftare a destra di un numero negativo di bit.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.