48 ROZDZIAŁ 8. OPERATORY Nie jest to zatem takie straszne na jakie wygląda. Widać, że bity będące na skraju są tracone, a w “puste” miejsca wpisywane są zera. Inaczej rzecz się ma jeżeli lewy argument jest liczbą ze znakiem. Dla przesunięcia bitowego w lewo a 1 | a2 ------+------+------ 0001 | 0000 | 0000 0011 | 0001 | 0000 0101 | 0010 | 0001 1000 | 1100 | 1110 1111 | 1111 | 1111 1001 | 1100 | 1110 Przesunięcie bitowe w lewo odpowiada pomnożeniu, natomiast przesunięcie bitowe w prawo podzieleniu liczby przez dwa do potęgi jaką wyznacza prawy argument. Jeżeli prawy argument jest ujemny lub większy lub równy liczbie bitów w typie, działanie jest niezdefiniowane. #include int main () { int a = 6; printf ("6 2 = %d\n", a2); /* wypisze 1 */ return 0; } Porównanie W języku C występują następujące operatory porównania: • równe (“==”), • różne (“!=”), • mniejsze (“ ”), • mniejsze lub równe (“
(…)
… jest niezdefiniowane1 .
Dla przesunięcia bitowego w lewo, jeżeli lewy argument jest nieujemny to operacja
zachowuje się tak jak w przypadku liczb bez znaku. Jeżeli jest on ujemny to zachowanie
jest zależne od implementacji.
Zazwyczaj operacja przesunięcia w lewo zachowuje się tak samo jak dla liczb bez
znaku, natomiast przy przesuwaniu w prawo bit znaku nie zmienia się2 :
a
| a>>1 | a>>2
------+------+-----0001 | 0000…
… wskazywanej przez wartość NULL czy do zmiennych poza tablicą.
2 ale jeżeli zależy Ci na przenośności kodu nie możesz na tym polegać
…
... zobacz całą notatkę
Komentarze użytkowników (0)