Przejdź do zawartości

BasicC/Operatory

Z Wikibooks, biblioteki wolnych podręczników.

Deklaracja zmiennych

[edytuj]

Używamy składni C: typ zmienna;, dla tablic: typ zmienna[rozmiar]; i t.d.
Dodatkowe typy SDL: Uint8 Uint16 Uint32 Sint8 Sint16 Sint32
Dodatkowo, jeśli program ma działać w przeglądarce WWW, wprowadzono uniwersalny sposób deklaracji tablic JEDNOWYMIAROWYCH:
typ zmienna Dim(rozmiar); co w JS spowoduje deklarację nieokreślonego typu.
Dla tablic określonego typu, również w JS, najpierw deklarujemy bufor o wielkości ROZMIAR bajtów przypisany zmiennej NAZWAB:
ByteBuffer(NAZWAB,ROZMIAR)
Następnie tablicę operującą na tym buforze przypisaną zmiennej NAZWAT, np. dla typu Uint32:
U32Array(NAZWAT,NAZWAB)
Ponieważ Uint32 zajmuje 4 bajty - będzie ona miała rozmiar ROZMIAR/4.
Do jednego bufora możne odnosić się kilka tablic, np. po zadeklarowaniu U16Array(NAZWAT16,NAZWAB) tablica NAZWAT16 będzie operowała na tych samych danych, ale traktowanych jako liczby całkowite 2-bajtowe. Deklaracji tych nie kończymy średnikiem. Dla C wymagany jest BasicSDL.h.
Wstępne przypisanie wartości np. tablicy można wykonac przy pomocy komend:
Data ... EndData, np:
STRING Name Dim(2)= Data "A.Rapid","J.Fast" EndData

Przypisanie i porównanie

[edytuj]

Stosuje się składnię C, czyli "=" dla przypisania, "==" dla równości, "!=" dla nierówności ("<>" jest niepoprawne). Po przypisaniu należy pamiętać o zakończeniu średnikiem.

Let(X,Y)
Do wersji 1.22 komenda przypisuje zmiennej X wartość wyrażenia Y, po której nie stosuje się średnika. Dodatkowo dokonuje rzutowania do typu double, co powinno dać prawidłowy wynik, w przeciwieństwie do podstawiania przez "=", jeśli w wyrażeniu występują liczby całkowite. Dokładnie wykonywana jest następująca operacja języka C:X=(double)Y; Od wersji 1.23 wykonuje kopiowanie łańcucha tekstowego.

Swap(X,Y)
Zamienia wartości zmiennych liczbowych X i Y z sobą. Wykonuje {VALUE=Y;Y=X;X=VALUE;}

Operatory logiczne

[edytuj]

Zdefiniowano następujące operatory logiczne (obok ich odpowiedniki w C): AND && MOD % NOT ! OR || XOR ^ Należy pamiętać, że przed i za komendami BasicC musi występować spacja (jeśli nie pełnią roli funkcji), więc nie można np. użyć NOT= zamiast !=, NOT = też jest błędne. XOR jest tak naprawdę operatorem bitowym, dla pozostałych operacji bitowych stosujemy składnię C. Zdefiniowana jest funkcja Mod działająca również na liczbach rzeczywistych oraz Xor opisane poniżej.

Dodatkowe operacje na bitach

[edytuj]

Bchg(x,b) Neguje bit b w x, bity liczymy od prawej strony poczynając od 0
Bclr(x,b) Zeruje bit w x
Bset(x,b) Ustawia bit w x
Btst(x,b) Zwraca 1, jeśli bit w x wynosi 1
BSchg(x,b) Zmienia bity w x, b jest liczbą, zmieniane są bity na pozycjach ustawionych w b na 1
BSclr(x,b) Zeruje bity w x
BSset(x,b) Ustawia bity w x
BStst(x,b) Zwraca 1, jeśli bity w x są ustawione

Warto przejrzeć def. tych funkcji w pliku Basic.h

Funkcje matematyczne

[edytuj]

Abs(x) wartość bezwzględna z x
Deg(a) wartość w stopniach kąta a podanego w radianach
Frac(a) część ułamkowa liczby a
Int(X) część całkowita liczby X (typu long int)
Max(X,Y) większa z liczb X i Y
Min(X,Y) Mniejsza z liczb X i Y
Mod(a,b) reszta z dzielenia a/b, działa też na typach ułamkowych
Rad(a) zamienia stopnie na radiany
Sqp(x) x*x
Sgn(a) zwraca 1, gdy a>0; 0, gdy a=0; -1, gdy a<0
Round(X) zaokrągla do liczby całkowitej, uwaga: .5 zaokrągla w dół
Ceil(X) zaokrągla w górę
Floor(X) zaokrągla w dół
ROUNDFC(double X, float a, float b) funkcja używana przez 3 powyższe
Xor(a,b) zwraca 0, gdy a AND b; w przeciwnym razie zwraca a OR b

Xor nie jest tym samym co XOR, nie występuje w czystym C i wiekszości odmian Basic.

Komendy te nie wymagają dodatkowej biblioteki. Round, Ceil, Floor są wolniejsze od odpowiedników z math.h, Max, Min, Mod są znacznie szybsze.