Ho due cortocircuiti a 16 bit (s1 e s2) e sto cercando di unirli in un unico numero intero a 32 bit (i1). Secondo le specifiche che sto trattando, s1 è la parola più significativa, e s2 è la parola meno significativa, e la parola combinata sembra essere firmata. (cioè il bit più in alto di s1 è il segno.)Il modo più semplice per combinare due cortocircuiti con un numero
Qual è il modo più pulito di combinare s1 e s2?
ho pensato qualcosa di simile
const utils::int32 i1 = ((s1<<16) | (s2));
avrebbe fatto, e sembra funzionare, ma sono preoccupato per sinistra-shifting breve da 16.
Inoltre, mi interessa la idea di usare un sindacato per fare il lavoro, qualche idea se questa è una buona o cattiva idea?
Nel caso di corti non sono sicuro che sia necessario. Lo standard ha: "Gli operandi devono essere di tipo integrale o di enumerazione e vengono eseguite promozioni integrali Il tipo di risultato è quello dell'operando sinistro promosso". Pertanto, il cortometraggio verrà promosso implicitamente. –
Huh. Non lo sapevo - immagino sia perché sono sempre paranoico sulle dimensioni dei tipi di dati. Grazie per il puntatore. –
È bello essere paranoici perché il cast sarebbe sicuramente richiesto su piattaforme con un int a 16 bit! –