C i przesunięcie bitowe

Mar 28, 2006 5 Replies

Witam.



Pytanie początkującego. Jak działa przesunięcie bitowe w C (Keil dla '51)? Tzn. co się dzieje z bitami które wpadają w "puste" bity?



Pisze odczyt temp. z DS18B21 i w MSB na 4 starszych bitach jeżeli są 1111 to jest temp. ujemna, jeżeli 0000 to dodatnia. Więc po odczycie bajtów do tablicy Bd[x] chcę:



n = Bd [1] //przypisać MSB do zmiennej n >>= 4 // przesunąć o 4 bity w prawo if (n == 0x0F) // porównać z 00001111 { minus = 1 } else { minus = 0 }



tylko czy na pewno będę miał zera po lewej? Gdzieś pisało że niekoniecznie będą to zera.



Pozdrawiam.


In the darkest hour on Tue, 28 Mar 2006 12:41:37 +0200, Henry(k) snipped-for-privacy@op.pl screamed:

Jeśli o C chodzi - w zależności od typu zmiennej. unsigned - 0, signed - 1. Wybór należy do Ciebie.

In the darkest hour on Tue, 28 Mar 2006 12:41:37 +0200, Henry(k) snipped-for-privacy@op.pl screamed:

Jeśli o C chodzi, to:

Jeśli najstarszy bit będzie równy 0 - wtedy bity z lewej strony uzupełniane będą zawsze zerem. Jeśli najstarszy bit będzie równy 1 - wtedy bity z lewej strony uzupełniane będą - 0 (w przypadku zmiennej unsigned) lub 1 (w przypadku zmiennej signed). Wybór należy do Ciebie.

Użytkownik "Artur M. Piwko" snipped-for-privacy@pu.kielce.pl> napisał w wiadomości news: snipped-for-privacy@beast.tu.kielce.pl...

zmienna bez znaku więc powinno działać jak chcę. Dzięki.

Użytkownik "Henry(k)" snipped-for-privacy@op.pl napisał w wiadomości news:e0b3tr$t78$ snipped-for-privacy@atlantis.news.tpi.pl...

&= 0x0F;

e.

Tak, po tej operacji najstarsze 4 bity beda rowne 0.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required