Sto lavorando con alcuni operatori bit a bit e voglio estrarre le ultime 16 cifre binarie di un numero e fare un'operazione con esse. Fondamentalmente voglio vedere un int negativo come 0xFFFFFFFF e quindi estrarre l'LSB FFFF
e concatenarli con 0
in modo da ottenere uno zero in modo che assomigli a 0x0000FFFF
. Mi interessa solo i numeri negativi più piccoli, quindi l'LSB dovrebbe essere tutte le informazioni di cui ho bisogno.Come ottenere le ultime 16 cifre binarie di un numero negativo e concatenarle?
Ecco il mio approccio in C:
#include <stdio.h>
int main(){
int a = -1, c = 0;
short b = (short)a;
printf("a is %x\nb is %x",a,b);
c = (0 << 16) | b;
printf("\nc is %x\n", c);
return 0;
}
mio processo di pensiero è che posso convertire il mio int a
ad un corto, che sembra FFFF
invece di FFFFFFFF
avrò un momento migliore. Sfortunatamente per me, viene stampato solo ffffffff
per le variabili
il cast in '(breve) a' è inutile perché qualsiasi più ampio il valore verrà automaticamente troncato –
@ LưuVĩnhPhúc grazie. C'è qualche ragione per usare a breve quando si tratta di manipolazione di bit? –
è necessario in alcuni casi ma non in questo caso –