Operacje na zmiennych

Czwartek, 05 Listopada 2009, 11:17
Czas czytania 3 minuty, 50 sekund
Zgodne z GM: gm5 gm6 gm7 gm8 gms1 gms2
Spis wszystkich operatorów GMLa za pomocą których można dokonywać operacji na zmiennych.
W Game Makerze wyróżniamy dwa typy zmiennych:

1) Zmienne liczbowe (real) - są to po prostu liczby rzeczywiste, np. a = 5, a=17.32, a = $A1 (szesnastkowo 161);

2) Łańcuchy tekstowe (string) - są to zmienne zawierające tekst, np. a = 'tekst';

Uwaga!
(w GameMakerze 2.x, łańcuchy tekstowe umieszczamy wyłącznie pomiędzy " " a nie ' ' ).

Należy jednak zauważyć, że a=5 to nie to samo co a='5', gdyż tekst nie jest liczbą i na odwrót i tych dwóch typów nie wolno bezpośrednio ze sobą porównywać.

Do zamiany liczby w tekst służy funkcja string(), do zamiany tekstu w liczbę służy funkcja real(), jednak tekst taki może zawierać tylko cyfry, znak minus, kropkę oddzielającą część dziesiętną oraz znak wykładniczy E (np. 1.E+1), bez liter i innych znaków.

Istnieje również wiele funkcji pozwalających na bardziej zaawansowane działania na zmiennych, skupię się jednak tylko na operatorach.

Operacje na łańcuchach tekstu:

Na tekście możemy dokonać dwóch operacji:

1) Konkatenacja, czyli łączenie tekstów: np. a = 'xxx' + 'yyy', a+='xxx';

2) Konkatenacja tekstu z samym sobą określoną ilość razy, np. a = 5 * 'x' zwraca 'xxxxx';


Operacje na liczbach:

Na liczbach można wykonać następne operacje:

Dodawanie: a=5+7; a=a+5, a+=5;

Odejmowanie: a=5-7; a=a-5; a-=5;

Zmiana znaku na przeciwny: a = -a;

Mnożenie: a=5*7; a=a*7; a*=7;

Dzielenie: a=5/7; a=a/7; a/=7; (nie można dzielić przez 0!)

Dzielenie całkowite div (dzielenie bez reszty / z zaokrągleniem w dół): a = 7 div 3 (7 div 3 = 2, bo 7/3 = 2, reszty 1);
Wynikiem dzielenia całkowitego jest zawsze liczba całkowita.

Reszta z dzielenia modulo : a = 7 mod 3 (7 mod 3 = 1, bo 7/3 = 2 reszty 1);
Reszta z dzielenia x mod y jest zawsze liczbą z zakresu od 0 do y-1.

Porównania:
Do porównań funkcji służą następujące operatory:
>, >=, ==, !=, <> , <, <= : większe, większe równe, równe, nierówne, różne, mniejsze, mniejsze równe

W Game Makerze nie ma funkcji post/pre-inkrementacji oraz post/pre-dekrementacji, które występują w innych językach.


Operacje logiczne:

W operacjach logicznych rozróżniamy dwie wartości: true, false. Wartość true (prawdę) oznaczają wszystkie liczby > 0, oraz stała true, wartość false (fałsz) oznaczają wszystkie zmienne <= 0 oraz stała false. Wykorzystywane są głównie do operacji warunkowych (if, while, etc.)

Rozróżniamy następujące operacje logiczne:

&&, and: prawdziwa, gdy wszystkie wartości wyrażenia mają wartość true, fałszywa w pozostałych przypadkach, np. 7 and 14 to prawda, 7 and -1 to fałsz.

||, or: prawdziwa, gdy co najmniej jedno wyrażenie jest prawdziwe, fałszywe tylko gdy wszystkie są fałszywe, np. 7 or -1 to prawda, 0 or -1 to fałsz.

^^, xor: prawdziwa, gdy oba argumenty są sobie przeciwne, fałszywa, gdy są takie same, np. 7 xor -1 to prawda, 7 xor 14 to fałsz

!: negacja, zamienia prawdę w fałsz i na odwrót, np. x = !7 to fałsz, x = !0 to prawda, x = !x zamienia prawdę w fałsz i na odwrót



Operacje bitowe:

Operacje bitowe to operacje, które zachodzą bezpośrednio na bitach liczby w systemie dwójkowym, np. liczba 12 to binarnie 1100.

>> : przesunięcie podanej ilości bitów w liczbie w prawo, poprzez usunięcie bitów na najmłodszej pozycji i dopisanie zer na najstarszej
np. 12 >> 1 to 6, 12 >> 2 to 3 (bo 1100 >> 1 = 0110 czyli 6, 1100 >> 2 = 0011, czyli 3)
Przesunięcie bitów w prawo o 1 jest równoznaczne z operacją dzielenia przez 2.

<< : przesunięcie podanej ilości bitów w liczbie w lewo, poprzez usunięcie bitów na najstarszej pozycji i dopisanie zer na najmłodszej
np. 12 << 1 to 24, 12 << 2 to 48 (bo 1100 << 1 = 1 1000 czyli 24, 1100 << 2 = 11 0000, czyli 48)
Przesunięcie bitów w lewo o 1 jest równoznaczne z operacją mnożenia przez 2.

|, &, ^ : operacje or,and,xor na bitach liczby
12 | 3 = 15, bo 1100 | 0011 = 1111
12 & 4 = 4, bo 1100 & 0100 = 0100
5 ^ 3 = 6, bo 0101 ^ 0011 = 0110

~: negacja bitowa liczby, np. ~12 = -13, bo 12 = ~0000 0000 ... 1100 = 1111 1111 ... 0011 (zmieniany jest także bit parzystości, liczby w GM mają 8 bajtów, od -9223372036854775808 do +4611686018427387904, dla których oznaczenie INF (nieskończoność) nie pozwala na operacje dodawania / odejmowania)

**********

Funkcje takie jak potęgowanie, pierwiastkowanie, logarytmowanie etc. wykonywane są przez funkcje wbudowane w Game Makera, nie są jednak operatorami, więc do ich poznania polecam lekturę dokumentacji programu.
Komentarze (łącznie 22, wyświetlam 1 - 15):
gnysek (Czw., 05 Lis. 09, 14:49)
#1

Nie chce mi się dodawać newsa, może zachęcę was samym komentarzem do przeczytania :)

S
slash (Czw., 05 Lis. 09, 15:36)
#2

Sztuka dla sztuki, ale i tak mi się podoba :) .

Roki (Czw., 05 Lis. 09, 15:41)
#3

Leniuszku XD
Mi się nie przydało, to już umiałem.

gnysek (Czw., 05 Lis. 09, 16:24)
#4

Jasne, zwłaszcza o mnożeniu tekstu wiedzieliście, skoro GM to jedyny język w którym tak można.

Roki (Czw., 05 Lis. 09, 17:21)
#5

No, czemu nie? Sam dochodziłem, bawiłem się, ale przez przypadek tak kiedyś miałem, do jakiejś gry i mi wychodził własnie blad z tekstem, no i doszedlem do tego :P

S
slash (Czw., 05 Lis. 09, 17:37)
#6

Gnysek, chyba sobie żarty robisz :P . Poza tym, w C++ chyba biblioteka stringa zawiera takowe przeładowanie operatorów. A nawet na pewno.

gnysek (Czw., 05 Lis. 09, 17:39)
#7

Przeładowanie, to nie to samo, bo w C++ możesz sobie przeciążać co chesz :)

Zresztą, to art dla początkujących, bo wiele osób ma problem z prostymi nawet operacjami.

S
slash (Czw., 05 Lis. 09, 17:41)
#8

Oj, gnysek, a czy ja gdzieś wspomniałem, że zły? Ja uważam, że przydatny.

Shocker51374 (Czw., 05 Lis. 09, 18:08)
#9

"Wartość true (prawdę) oznaczają wszystkie liczby > 0, oraz stała true, wartość false (fałsz) oznaczają wszystkie zmienne < 1 oraz stała false." - Czyli np. 0.5 to jest naraz true i false? :)

E
Egzekutor (Czw., 05 Lis. 09, 18:11)
#10

Tylko liczby naturalne ponad 0 są true z tego co wiem ;pp Spoko artykuł :)

gnysek (Czw., 05 Lis. 09, 18:30)
#11

@Shocker51374 masz rację, ostatnio pisałem w C, gdzie głównie intów używam i zapomniałem, że przecież są ułamki :)

Misiek999 (śro., 11 Lis. 09, 17:00)
#12

po testach mi wszyło że true jest od 0.6 w górę a od 0.5 w dół jest false :)

Tymon (śro., 11 Lis. 09, 17:30)
#13

Masz błąd: "1100 >> 2 = 11 0000, czyli 48".

Shocker51374 (śro., 11 Lis. 09, 18:03)
#14

Misiek: Mniejsze od 0.5 - false, większe lub równe - true. Teraz sprawdziłem.

Misiek999 (śro., 11 Lis. 09, 19:42)
#15

lol u mnie 0.5 to false na bank. :D mam gm7.

Najnowsze wersje GameMakera:

Stabilna
2023.11.1.129 • 2023.11.1.160
wydana 77 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 136 dni temu
Beta
2024.200.0.505 • 2024.200.0.523
wydana  wczoraj
= IDE, = Runtime
Użytkownicy online
2 użytkowników aktywnych:
gości: 1, userów: 1
 Adriann
(~ostatnie 15 minut)
Discord
Shoutbox
gnysek (14:47, 26.02.24)
Na Discordzie też był :) Warto tam zaglądać :)
S
Sutikku (23:23, 23.02.24)
powiedziałbym, że może jakiś gigantyczny czerwony baner by się przydał, ale obawiam się, że mógł taki być, a ja go nie widziałęm
S
Sutikku (23:22, 23.02.24)
uwierzcie mi, że wchodzę na gmclan naprawdę bardzo często, ale jakoś tej ligi nie zauważyłem :(
I am Lord (12:01, 23.02.24)
Kurde kolejna tura mnie omineła 🙈
gnysek (10:49, 20.02.24)
Ja czekam na pluginy do IDE, czego YYG nie zrobi, zrobimy sami.
Adriann (11:50, 16.02.24)
Ciekawe jak go przerobią, osobiście liczę na jakąś większą rewolucję a nie tylko usprawnienie bo narazie jest jak jest :d
gnysek (10:32, 08.02.24)
Edytor roomów ma swoje minusy. Ale ma być tworzony nowy wkrótce, chociaż pewnie 6-12 miesięcy zanim trafi do wersji stabilnej jak nic.
p
pablo1517 (08:40, 07.02.24)
No ja odkąd zacząłem w ue4 pracować to niestety z GMLem dawno nie obcowalem
exp (20:13, 30.01.24)
@pablo1517 ja przerzuciłem się z klasycznego GM na Studio cztery lata temu, więc przeskok trochę mniejszy, ale generalnie idea dużo się nie zmieniła. jest trochę upierdliwości i niepotrzebnych według mnie zmian, ale też duże usprawnienia (edytor roomów to raj na ziemi w porównaniu z tym oryginalnym)
Adriann (18:59, 28.01.24)
Takk..strasznie są upierdliwe :D
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?