48
Nie jest to zatem takie straszne na jakie wygląda. Widać, że l»itv 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 << b jeżeli a jest uicujcmua i wartość <i • 2* mieści się w zakresie liczby to jest to wynikiem operacji. W przeciwnym wypadku działanie 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 zacltowuje się tak samo jak dla liczb bez znaku, natomiast przy przesuwaniu w prawo bit znaku nie zmienia się2:
------+------+------
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 <stdio.h>
int main ()
{
int a = 6;
printf ("6 « 2 - 7,d\n", a«2); /* wypisze 24 */ printf ("6 » 2 ■ */td\n", a»2); /* wypisze 1 */ return 0;
>
W języku C występują następujące operatory porównania:
• równe (“==”),
• różne (“!=”),
• mniejsze ("<”).
• większe (“>”),
• mniejsze lub równe (“<=”) i
'Niezdefiniowane w takim samym sensie jak niezdefiniowane jest zachowanie programu, gdy próbujemy odwołać się do wartości wskazywanej |>rzez wartość NULI. czy do zmiennych pusta tablic;}.
ale jeżeli zależy O na (irzenośituści kodu nie możesz na tym polegać