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
2024.4.1.152 • 2024.4.1.202
wydana 28 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 246 dni temu
Beta
2024.600.0.576 • 2024.600.0.602
wydana  5 dni temu
= IDE, = Runtime
Użytkownicy online
2 użytkowników aktywnych:
gości: 1, userów: 1
 Adriann
(~ostatnie 15 minut)
Discord
51 użytkowników online na discordzie:
Kysiu, kamrat, s..., Alice, Nitro Slav, Carl-bot, RogerDodg3r, EchoDuck, PeekoHiko, GibkiKaktus, Grela, Add92, debil debilowski, Kowu, Kuzyn, OdrzuconyKrakers, Filyps, fervi, m..., 21Lancz, Fejurekk, Sevitaus, Kalor, r..., Skini, lethian, chleb, MKP (GEM), Arrekin, yazaa, Domeen0, Dyno, 🆅🅸🆃🅾74🅼, Moho, LeD, ZYGZAK, Miłosz, 🧁Cupcake🧁, Ulti, bagno, Tidżi, Danieo, g..., l..., moeglich, Nikas, Krzysiek1250, Shockah, Kandif, Cosplyfanka, exigo
Shoutbox
gnysek (14:15, 17.06.24)
Bo Łapusz woli alkohol, niż się organizować. Co tam Pixel Heaven, sprawdźcie jego zbiórki na książki...
Adriann (21:02, 13.06.24)
Bardzo słusznie, straszna patola z tą organizacją :D
I am Lord (08:35, 13.06.24)
Ale co jak co, zrobiło się o imprezie głośno.
I am Lord (08:35, 13.06.24)
No słyszałem już że drama była :D
gnysek (19:58, 10.06.24)
Po 16-17 każdemu :)
Tymon (18:19, 10.06.24)
To komu udało się wejść na PH?
gnysek (13:35, 03.06.24)
Przypominam, ze w sobotę i niedzielę na Pixel Heaven się mozemy zobaczyc
Wojo (03:18, 30.05.24)
gmclan wiecznie żywy
gnysek (10:09, 21.05.24)
Ale z jakimi błędami...
I am Lord (09:52, 20.05.24)
o piszą o nas 😁
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?