Sida 1 av 1

C: Förvirring om vänsterskiftning

Postat: 9 maj 2020, 12:21:48
av Zkronk
Hej!

Jag har råkat ut för en kodsnutt som jag inte förstår varför den fungerar som den gör.
Vänsterskiftar jag en 8-bitars variabel 8 steg borde väl den bli 0b00000000?
Hade jag type-castat value till en uint16_t innan jag gjorde vänsterskiftningen hade jag förväntat mig resultatet jag får nu däremot.

Kod: Markera allt

#include <stdint.h>

int main(void)
{
    uint8_t value = 0b10101111;
    uint16_t storage = value << 8;

    // storage har nu värdet 0b1010111100000000 enligt debuggern.

    return 0;
}

Re: C: Förvirring om vänsterskiftning

Postat: 9 maj 2020, 12:49:31
av bit96
Vid beräkningar omvandlas värdena alltid(?) till minst 'int'.
Jag minns inte de exakta reglerna nu, men kolla upp begreppen typomvandling och heltalsutvidgning.

Som vanligt är det i C definierat exakt som händer.
Observera att det ibland kan var definierat till att vara odefinierat. :)
Sen är det upp till tillverkarna av kompilatorn att välja vilka regler man vill följa och inte.

Du bör alltså själv type-casta och maska så det blir exakt som du vill när man håller på med bit-manipulering.

Re: C: Förvirring om vänsterskiftning

Postat: 9 maj 2020, 13:12:44
av Zkronk
Tack!

Det verkar heta integer promotion på engelska?