GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Bayshore le 03 Juin 2008, 20:54:19

Titre: Que signifie le signe &
Posté par: Bayshore le 03 Juin 2008, 20:54:19
Bonsoir,

dans l'en-tête de la commande strtok, il y a un signe & devant le deuxième argument, que signifie-t-il ? :)

strtok(const string[], &index, const seperator[] = " ")

Merci d'avance,
Alexandre.
Titre: Re : Que signifie le signe &
Posté par: Orosko le 03 Juin 2008, 21:06:28
Je sais qu'il y a un post qui rapelle tout les signe comme ça, mais je saurais pas t'en dire plus  :(
Titre: Re : Que signifie le signe &
Posté par: NatiVe™ le 03 Juin 2008, 21:42:04
& ca veut dire "et".

NV.

Titre: Re : Que signifie le signe &
Posté par: feldbrau le 03 Juin 2008, 21:52:17
Par exemple dans une condition, tu peut imposer deux chose:

exmple:

if(condition1 && condition2)

si les deux condition ne sont pas remplit la fonction ne se declenchera pas. Si tu utilise: || c'est un choix, si condition1 n'est pas remplit et que la condition2 est remplit la fonction "fonctionne" (XD)

En esperant t'avoir aidé ;)
Titre: Re : Que signifie le signe &
Posté par: Bayshore le 04 Juin 2008, 07:55:14
NatiVe et feldbrau, là vous parlez de && :)

++
Alexandre
Titre: Re : Que signifie le signe &
Posté par: feldbrau le 04 Juin 2008, 08:34:56
Arf, desole pas fait gaffe.

Pour le index, je sais pas du tout :s
Titre: Re : Que signifie le signe &
Posté par: Syg le 04 Juin 2008, 11:14:10
Il y a trois "façons" d'utiliser le signe '&' en PAWN.

La première c'est en le doublant (&&) et ceci correspond au ET logique utilisé dans les tests (ceci a déjà été dit et est connu de tous).

La deuxième utilisation ce fait dans une expression et correspond à un ET bit a bit.

Exemple :
Calculons 52&23
52 = 00110100 (en binaire)
23 = 00010111 (en binaire)
Avec les régles de base 0&0=0, 0&1=0, 1&0=0 et 1&1=1 ou trouve
00110100
00010111
--------------
00010100 = 20 donc 53&23=20.
Vous allez donc me demander à quoi ça sert.
Et bien l'exemple ci-dessus n'a aucune utilité en soi.

Par contre, en définissant des constantes n'ayant qu'un seul bit positionné à 1 (00000001, 00000010, ...) on peut s'en servir comme d'un masque.
Prenons un exemple concret :

Dans SAMP nous trouvons les defines suivants :
#define KEY_CROUCH            (2)
#define KEY_FIRE            (4)
2=00000010 (b) et 4 = 00000100(b)

Lorsque que l'on récupère les touches pressées par l'utilisateur, on obtient un nombre (donc 16 bits en PAWN mais on se contenera de 8 bits pour simplifier)
Chaque bit de ce nombre correspond à une touche et si la touche est enfoncée, le bit correspondant est à 1.
Comme l'utilisateur peut appuyer sur plusieurs touches en même temps, ce nombre peut contenir plusieurs bit à 1.
Si l'utilisateur appuie sur KEY_CROUCH (accroupi), la valeur du nombre sera 00000010 (=2).
Si il appuie sur KEY_FIRE (tirer), sa valeur sera 4.
Par contre, si il appuie en même temps sur ces deux touche, la valeur du nombre sera 6 (4+2).
Si on veut tester les touches, il va falloir tester toutes les valeurs possibles de ce nombre.
Vu qu'il y a au moins 10 touches, il y aura au moins 2^10 (=1024) valeurs possibles.
Et c'est là qu'intervient l'opérateur &.
Il permet "d'extraire" d'un nombre un bit qui nous interresse.
Si notre nombre vaut 6 (=00000110 en binaire)
Quand on fait 6&KEY_CROUCH on obtient un nombre différent de 0 (on obtient 4 en fait)
Par contre si on fait 6&KEY_JUMP (KEY_JUMP=32=00100000) on obtient 0 car l'utilisateur n'a pas utilisé la touche JUMP.

Exemple de code utilisant cet opérateur :
GetPlayerKeys (playerid, keys, updown, leftright);
if (keys & KEY_ACTION)
{
/* Le joueur à appuyé sur le touche ACTION */
}

La troisième utilisation du signe & est le passage par référence des paramètres des fonctions (c'est la question d'Alexandre).
Il existe deux façon de passer les paramètres à une fonction en PAWN :
- La passage par valeur
- Le passage par référence
Dans le passage par valeur, la valeur du paramètre est copié temporairement sur la pile et la fonction l'utilise. La fonction n'a pas accès à la variable qui contient la valeur.
Ainsi si on considère la fonction suivante :
MaFonction (a)
{
   a=3;
}
NB : Il se peut que le compilo emmete un warning

Et un appel à cette fonction :
new UneValeur=7;
Mafonction (UneValeur);

Après l'appel de la fonction, la valeur de UneValeur n'est pas changée.

Dans le passage par référence, on passe une référence à la variable qui sert de paramètre.
Ainsi si on considère la fonction suivante :
MaFonction (&a)
{
   a=3;
}

Et un appel à cette fonction :
new UneValeur=7;
Mafonction (UneValeur);
Après l'appel de la fonction, la valeur de UneValeur est 3.

Attention, les appels suivants sont interdit (erreur de compil) :
MaFonction (&49);
MaFonction (&MAX_PLAYERS);
car 49 et MAX_PLAYERS sont des constantes et non des variables
++
Syg





Titre: Re : Que signifie le signe &
Posté par: Nikko™ le 04 Juin 2008, 11:36:44
Interressant mais jai rien compris. Ca cest digne d'un grand expert programmeur ...  ;)

++
nikko
Titre: Re : Que signifie le signe &
Posté par: NatiVe™ le 04 Juin 2008, 11:47:41
OMAYGAD !

Les nombre en binaire tu les connais par coeur ?  :ohmy

NV.

Titre: Re : Que signifie le signe &
Posté par: Syg le 04 Juin 2008, 12:01:41
Non Mr.Native, pour le binaire j'utilise la calculatrice de Windows en mode scientifique.

++
Syg
Titre: Re : Que signifie le signe &
Posté par: NatiVe™ le 04 Juin 2008, 12:06:58
Ha ok :)

Parce que si tu connais tout les nombre en binaire et toute ces forme lol

NV.

Titre: Re : Que signifie le signe &
Posté par: Syg le 04 Juin 2008, 12:18:05
C'est juste parce que c'est plus rapide d'utiliser la calculatrice.
Sinon, je sais convertir un nombre de la base 10 vers la base 2 (et réciproquement).
D'ailleurs, c'est tellement facile qu'on peut le faire de tête, suffit de savoir diviser par 2.

Si tu veux que je te donne la méthode, y'a qu'à demander.

++
Syg
Titre: Re : Que signifie le signe &
Posté par: Nikko™ le 04 Juin 2008, 12:21:55
Et tu fait comment pour le calcul du nombre en binaire ??
tu tape quoi ?

++
nikko
Titre: Re : Que signifie le signe &
Posté par: NatiVe™ le 04 Juin 2008, 12:37:06
Et ba je veut bien alors SYG :)

NV.

Titre: Re : Que signifie le signe &
Posté par: Bayshore le 04 Juin 2008, 12:56:05
Ah merci des infos Syg. :)

Il m'a fallu 2 lectures. :happy

++
Alexandre
Titre: Re : Que signifie le signe &
Posté par: Syg le 04 Juin 2008, 14:37:34
Conversion d'un nombre décimal en binaire.

1) Méthode facile (avec CALC.EXE)
- Démarrer CALC.EXE
- Dans le menu choisir Affichage/Scientifique
- Saisir le nombre décimal à convertir
- Cliquer sur la case à cocher Bin

2) Méthode moins facile (avec son propre cerveau)
- Apprendre à diviser par 2 (c'est très important)
- Diviser le nombre à convertir par 2.
- Si le reste de la division est 0, on écrit 0, sinon on écrit 1 (Note : Si le nombre à diviser en pair, le reste est 0 sinon, le reste est 1)
- Diviser le résultat (de la division) par 2
- Si le reste de la division est 0, on écrit 0 à gauche du premier bit écrit, sinon on écrit 1
- Répeter les deux dernières opérations jusqu'à ce que le résultat de la division soit 0.

Exemple :
Conversion de 623 en binaire
623/2 = 311 reste 1 => j'écrit 1
311/2 = 155 reste 1 => j'écrit 1 à gauche du 1 soit 11
155/2 = 77 reste 1 => 111
77/2 = 38 reste 1 => 1111
38/2 = 19 reste 0 => 01111
19/2 = 9 reste 1 => 101111
9/2 = 4 reste 1 => 1101111
4/2=2 reste 0 => 01101111
2/2 = 1 reste 0 =>001101111
1/2 = 0 reste 1 => 1001101111 (On arrive toujours à cette dernière division)

Ceci marche aussi pour la conversion vers d'autres base (base 16 ou 8 par exemple)
Exemple de conversion de 623 en octal (base 8, de moins en moins utilisée) :
623/8 = 77 reste 7 => J'écrit 7
77/8 = 9 reste 5 => 57
9/8=1 reste 1 => 157
1/8=0 reste 1 => 1157 (la calculatrice Windows sait aussi faire la conversion en octal)

Autre méthode pour la conversion en octal :
On part du binaire (1001101111) et on regroupe la bit par groupe de 3 en partant de la fin : 1 001 101 111
On converti chaque groupe en décimal : 1->1, 001->1, 101->5 et 111->7 et on retrouve 1157.
Le 3 pour le nombre de bits dans les groupes n'est pas choisi au hasard, c'est car 8=2^3.

Pour un conversion en base 16, on aurait fait des groupes de 4 (16=2^4)
Mais pour la base 16, le reste de la division par 16 est un nombre compris entre 0 et 15 c'est pourquoi on utilise 6 lettres (ABCDEF) pour écrire les restes de 10 à 15.

Exercices :
1) Convertir 4294967296 en base 2.
2) Convertir 162791 en base 24.
3) Convertir 48461859 en base 36.
Remarque : Jusqu'à la base 36, on peut utiliser les lettres de l'alphabet de A à Z.

J'attend vos réponse en PM  :)

++
Syg
Titre: Re : Que signifie le signe &
Posté par: NatiVe™ le 04 Juin 2008, 14:43:31
lol SYG le professeur  :happy

Merci pour cette super explication :)

NV.

Titre: Re : Que signifie le signe &
Posté par: Nikko™ le 04 Juin 2008, 16:58:38
AH ouai pas mal syg  ;) merci pour ton cour  :)

++
nikko
Titre: Re : Que signifie le signe &
Posté par: feldbrau le 04 Juin 2008, 17:14:56
Merci de m'avoir explosé le cerveau durant un jour de repos ^^. J'ai pas tous lu, et j'ai rien compris. J'ai commencé au mot Exercices, j'ai terminé à 623/2 = 311 reste 1 => j'écrit 1.

Si le symbole "&" veut dire ca, j'arrete tous mdrr
Titre: Re : Que signifie le signe &
Posté par: Nikko™ le 04 Juin 2008, 17:45:15
Ta raison arète tout ^^

++
nikko
Titre: Re : Que signifie le signe &
Posté par: Bayshore le 04 Juin 2008, 21:40:25
Aufait Syg, les réponses en PM tu peut les attendre longtemps... :D

++
Alexandre
Titre: Re : Que signifie le signe &
Posté par: Syg le 04 Juin 2008, 21:45:25
Bon je résume pour feldbrau :

opérateur && -> ET logique (a && b vaut 1 si a>0 ET b>0 , ça vaut 0 sinon)
opérateur & -> ET bit à bit (pas possible d'expliquer facilement en une phrase, va voir mon premier post si ça t'intéresse)
& devant le paramètre d'une fonction -> Passage par référence (permet à la fonction de modifier la valeur d'une variable)

Ah, je suis déçu, je n'ai reçu encore aucun PM avec les réponses aux petits exercices que je vous ai donné.
Aller, faites un effort !!
Exercices :
1) Convertir 4294967296 en base 2.
2) Convertir 162791 en base 24.
3) Convertir 48461859 en base 36.
Remarque : Jusqu'à la base 36, on peut utiliser les lettres de l'alphabet de A à Z.

++
Syg
Titre: Re : Que signifie le signe &
Posté par: NatiVe™ le 04 Juin 2008, 21:56:25
Je veut bien faire ton exercice mais j'ai pas compris ce que c'était que la base 2 et les autre  ;D

NV.

Titre: Re : Que signifie le signe &
Posté par: MadFire le 04 Juin 2008, 21:59:43
Moi aussi faut expliquer le PLUS clairement possible Chef!
Titre: Re : Que signifie le signe &
Posté par: Nikko™ le 04 Juin 2008, 22:01:02
Ouai cest quoi la base 2 ?

++
nikko
Titre: Re : Que signifie le signe &
Posté par: Syg le 04 Juin 2008, 22:24:37
Je vais pas vous faire un cours sur les base. A moins que vous le demandiez ....

Parmi les bases les plus utilisées, on trouve :
La base 10 ou décimal, très utilisée chez tous les épiciers du monde entier (sauf au Népal) de nos jours (et chez les bouchers, boulangers, garagistes, ....).
La base 60 ou sexagésimal utilisée pour les minutes et secondes.
La base 16 ou héxadécimal utilisée en informatique car plus simple à manipuler que la base 2 (Notation avec 0x devant).
La base 2 ou binaire qui est seule base que sait traiter un processeur (pas de notation particulière).
La base 8 ou octal qui a tendance à ne plus être utilisée (Notation avec \ devant).
La base 12 ou duo décimal encore utilisée de nos jour au Népal (à la place de la base 10).

D'autres bases ont été utilisées dans l'Antiquité par différentes civilisations (Sumériens, Babyloniens, Egyptiens, ...)

++
Syg