Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Sommare alcuni bit di un int

    Salve,
    vorrei implementare una funzione hash di tipo folding ( si tratta di sommare alcuni gruppi di bit della chiave argomento della funzione nota:le chiavi sono int)).
    Dato che l'unico modo che conosco per considerare i gruppi di bit e fare una struct del tipo

    codice:
     
    typedef struct number{
     unsigned p1:3;
     unsigned p2:4;
     unsigned p3:3;
     unsigned p4:6;
    }number;
    vorrei castare un int come number, sommarne quindi i campi e poi restituirne la somma, peccato che il compilatore non sia d'accordo.
    Non capisco perchè dato che number è da 16 bit come anche gli unsigned int e gli int.
    Qualcuno sa perchè o mi sa suggerire un metodo migliore per farlo?

    Grazie dell'aiuto

  2. #2
    Fai una union che contenga un membro int e uno di tipo number; in alternativa, ottieni il puntatore all'int da convertire, castalo a puntatore a struttura number e quindi facci quel che ti pare. Una terza possiblità sarebbe usare gli operatori bitwise sull'intero per ottenere i dati che ti servono (sono tendenzialmente più flessibili dei bitset).
    Per inciso, le dimensioni degli interi non sono fissate dallo standard, e sulla maggior parte delle macchine x86 attuali short è 16 bit e int e long sono 32 bit, tranne che sulle macchine Linux x86_64, dove long è 64 bit; lo stesso vale per le loro versioni unsigned.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    grazie mille, ho usato la union

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.