Sto cercando di capire come funzionano esattamente gli operatori di spostamento bit aritmetico in C, e come influenzerà gli interi firmati a 32 bit.Scambio bit aritmetico su un numero intero con segno
Per rendere le cose semplici, diciamo che lavoriamo all'interno di un byte (8 bit):
x = 1101.0101
MSB[ 1101.0101 ]LSB
Leggendo altri messaggi su Stack Overflow e alcuni siti web, ho scoperto che: <<
si sposterà verso MSB (per a sinistra, nel mio caso), e riempire "vuoti" bit LSB con 0 s.
E >>
si sposterà verso LSB (a destra, nel mio caso) e riempire i bit "vuoti" con SM bit
Quindi, x = x << 7
si tradurrà in movimento LSB a MSB, e l'impostazione di tutto per 0s.
1000.0000
Ora, diciamo che vorrei >> 7
, ultimo risultato. Ciò comporterebbe [0000.0010]
? Ho ragione?
Ho ragione riguardo alle mie ipotesi sugli operatori di turno?
Ho appena provato sulla mia macchina, **
int x = 1; //000000000......01
x = x << 31; //100000000......00
x = x >> 31; //111111111......11 (Everything is filled with 1s !!!!!)
Perché?
possibile duplicato del [operatore Spostamento in C] (http://stackoverflow.com/questions/7622/shift-operator-in-c) –
"Perché?"Perché ** la tua implementazione ** lo dice. Controlla la documentazione: ** deve ** definire il comportamento del giusto spostamento di un valore negativo (o non hai un compilatore C) – pmg
@ pseudonym27 che devi trovare in documentazione – newprint