Ga naar hoofdinhoud

Binary

Credits

Deze tutorial is gebaseerd op een topic op de SA-MP-forums. De auteur is Kyosaur.

Wat is binary?

Binary (binair) is een talstelsel dat twee symbolen gebruikt: 0 en 1. Waar decimaal (base 10) tien cijfers gebruikt, gebruikt binary alleen 0 en 1. Voor computers is dit essentieel: op het laagste niveau worden berekeningen uitgevoerd met aan/uit (1/0). Vergelijk decimaal en binair naast elkaar:

Decimal (base 10)

0
1
2
3
4
5
6
7
8
9
10
11
12
13

Binary (base 2)

0 //0
1 //1
10 //2
11 //3
100 //4
101 //5
110 //6
111 //7
1000 //8
1001 //9
1010 //10
1011 //11
1100 //12
1101 //13

Plaatswaardes in binary heten “bits” (binary digits) en zijn machten van 2; net zoals in decimaal machten van 10 zijn. Voorbeeld: 13 in decimaal en binair:

Decimal (base 10)

13

// 1 * (10^1) + 3 * (10^0) = 10 + 3 = 13

Binary (base 2)

1101

// 1 * (2^3) + 1 * (2^2) + 0 * (2^1) + 1 * (2^0)
// 8 + 4 + 0 + 1 = 13

Belangrijk: alleen bits die 1 zijn tel je mee. Een handige rij machten van 2:

4096,2048,1024,512,256,128,64,32,16,8,4,2,1

Een diepere blik op bits

Pawn is “typeless” met 32-bits cellen. Begrippen als signed/unsigned en 2’s complement bepalen bereik en negatieve waarden. Maximum signed int in Pawn:

2^31 - 1 = 2147483647
1111111111111111111111111111111 // 31 bits aan

De 32e bit (MSB) markeert het teken. Negatieven worden met 2’s complement opgeslagen (bits flippen en 1 optellen).

Binaire operators (bitwise)

  • Arithmetic shift: >> en <<
  • Logical shift: >>>
  • NOT (complement): ~
  • AND: &
  • OR: |
  • XOR: ^

AND

1100 //12
&
0100 //4
=
0100 //4

OR

1100 //12
|
0100 //4
=
1100 //12

XOR

1100 //12
^
0100 //4
=
1000 //8

NOT

~0 = 11111111111111111111111111111111 // -1

Bit shifting

Rechts (>>) en links (<<) schuiven bits. Arithmetic right shift padt met de MSB (behoudt teken), arithmetic left shift padt met 0. Logical right shift (>>>) padt altijd met 0 (resultaat wordt positief).

De rest van de voorbeelden en uitleg uit het origineel blijven ongewijzigd van toepassing; code en tabellen kun je 1:1 gebruiken.