Ora so come è fatto in una riga, anche se non riesco a capire perché la mia prima bozza non funziona bene. Quello che sto cercando di fare è salvare la parte inferiore in una variabile diversa, spostando il byte più alto a destra e aggiungendo i due numeri tramite OR. Tuttavia, taglia semplicemente la metà inferiore dell'esadecimale e restituisce il resto.Scambio di byte inferiore (0-7) con quello superiore (8-15) uno
short int method(short int number) {
short int a = 0;
for (int x = 8; x < 16; x++){
if ((number & (1 << x)) == 1){
a = a | (1<<x);
}
}
number = number >> 8;
short int solution = number | a;
return solution;
Attenzione spostando una variabile firmato: il bit del segno può causare un comportamento indefinito. Meglio usare unsigned, o cast per unsigned prima del turno. –
Si sta eseguendo uno spostamento verso destra di un intestazione (breve) con segno - questo si traduce in un comportamento definito dall'implementazione (in genere uno spostamento aritmetico). Utilizzare unsigned (short) ints per evitare questo problema. –
Tracciare questo in un debugger, passare un'istruzione alla volta ed esaminare i valori di ciascuna variabile. – abelenky