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.2.0.132 • 2024.2.0.163
wydana 43 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 182 dni temu
Beta
2024.400.0.532 • 2024.400.0.551
wydana 14 dni temu
= IDE, = Runtime
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
48 użytkowników online na discordzie:
Kysiu, s..., Alice, DungeonFairy🧚, Nitro Slav, Carl-bot, p..., Dominator2v, Grela, Wielki Druid, TinyFish, Add92, 21Lancz, Kowu, OdrzuconyKrakers, Filyps, fervi, Radek Ignatów, Kalor, r..., antek, LadyLush, lethian, VanhGND, HappyOrange, MKP (GEM), Arrekin, MagnusArias, Domeen0, Dyno, 🆅🅸🆃🅾74🅼, Deusald, Korodzik, 𝕳𝖚𝖌𝖔 𝕲𝖔𝖓𝖝𝖆𝖑𝖊𝖝, LeD, Ulti, 🧁Cupcake🧁, bagno, Mtax, g..., l..., Alkapivo, moeglich, Nikas, Krzysiek1250, Shockah, Kandif, exigo
Shoutbox
gnysek (20:44, 11.04.24)
Niektórzy dlatego wybierają GMEdit. Ale ja liczę na Code Editor 2, tylko na razie zbyt zbugowany jest.
Tymon (16:11, 11.04.24)
Stitch dla mnie osobiście jest lepszy bo nie musze kopać się z interfejsem GMa i mogę tylko pisać kod.
Tymon (16:05, 11.04.24)
Yes. Obecny nie jest taki zły, jak zainstalowałem najnowszą stabilną to w porównaniu z tym czego używałem... 10 lat temu...? Wszystko wydaje się lepsze.
gnysek (22:48, 10.04.24)
bscotch/stitch ? Ja czekam na fixy do nowego edytora, bo wszystko wydaje się dziś lepsze od tego obecnego :D
Tymon (19:54, 10.04.24)
Hm, Stitch okazuje się całkiem dobrą alternatywą dla wbudowanego edytora
Wojo (22:16, 08.04.24)
siemano huder myślałem, że zniknąłeś całkiem z gmclanu bo na discordzie cie nie ma :D
I am Lord (00:37, 05.04.24)
O dzięki :D
gnysek (09:58, 02.04.24)
Znalazłem na podstawie jego postów: youtube.com/@Jakim_
I am Lord (20:16, 01.04.24)
Ktoś ogarnia jakie konto miał Jakim na YT?
gnysek (16:07, 29.03.24)
Nowy Edytor kodu jednak po świętach
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?