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.

[rozmiar=16px]Operacje na łańcuchach tekstu:[/rozmiar]

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';


[rozmiar=16px]Operacje na liczbach:[/rozmiar]

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.11.0.179 • 2024.11.0.227
wydana  3 dni temu
LTS
2022.0.3.85 • 2022.0.3.99
wydana 19 dni temu
Beta
2024.1100.0.713 •
2024.1100.0.726
 0.14.0

wydana 11 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
Shoutbox
Uzjel (20:17, 10.12.24)
Cały ruch przeniósł się na Discorda.
MagnusArias (17:43, 01.12.24)
O matko... a ja tutaj jestem od ponad 15 lat i czasami zaglądam... biernie bo biernie, ale czasem wpadnę
gnysek (11:46, 17.11.24)
Witamy, witamy!
baca (12:22, 16.11.24)
To już 25 lat.. Witam po paru latach nieobecności.
gnysek (11:05, 15.11.24)
Natomiast obecne forum istnieje od 2004, jak z iglu.cz na gmclan.org przeszliśmy i od tego czasu nie było resetów danych.
gnysek (12:35, 13.11.24)
Ogólnie GMCLAN istnieje 22 lata, ale na to trofeum nie zrobiłem (jeszcze xD)
Chell (20:41, 08.11.24)
wow, ta emotka w ogóle nie wygląda jak : O xD
Chell (20:40, 08.11.24)
tylko? :O 4tk ma 15
Borek (18:12, 07.11.24)
Właśnie dostałem powiadomienie z forum, że jestem na GMClanie 18 lat :D Ja pierdzielę...
S
Sutikku (08:43, 18.10.24)
TIL, gamemaker jest starszy ode mnie
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?