Page 1 sur 2

if ( j & 1 || ! strstr ( " \t" , F ) )

Publié : lun. 25/oct./2004 18:37
par Patrick88
c'est du C , qui peut me dire en clair ce que ça veut dire :

int j et char F [ 2 ]

-> ça if ( j & 1 || ! strstr ( " \t" , F ) )

les || ! &
( & = and , et logique )
( ! = not comme dans != not égale )
mais || j'ai zoublié

qu'est que ça peut bien donné comme résultat

sachant que

strstr est une fonction définie par l'utilisateur
qui recherche " \t" dans le buffer F et renvoie la 1ere position de l'argument dans le buffer, si pas trouvé renvoit 0

j=résultat d'un incrément .

:?:

patrick88

Publié : lun. 25/oct./2004 18:45
par Chris
|| c'est pas un OU logique, ça?

Publié : lun. 25/oct./2004 18:51
par Dr. Dri
si j est impair ou que strstr("\t", ...) retourne 0

Dri

Publié : lun. 25/oct./2004 19:10
par Patrick88
ok , c'est noté merci

euh ! 8O et comment on dit impair en purebasic !?

patrick

Publié : lun. 25/oct./2004 19:16
par Chris
Fais un Modulo (a % b)

Publié : lun. 25/oct./2004 19:33
par Anonyme2
Patrick88 a écrit :ok , c'est noté merci

euh ! 8O et comment on dit impair en purebasic !?

patrick

Code : Tout sélectionner

a = 3

b = 6

If a & 1
  Debug "a est impair"
Else
  Debug "a est pair"
EndIf

If b & 1
  Debug "b est impair"
Else
  Debug "b est pair"
EndIf

Publié : lun. 25/oct./2004 20:02
par Chris
Denis, pourquoi a & 1

Code : Tout sélectionner

a = 3 

b = 6 

If a % 2
  Debug "a est impair"
Else
  Debug "a est pair"
EndIf

If b % 2
  Debug "b est impair"
Else
  Debug "b est pair"
EndIf
On a assez ralé pour l'avoir, la fonction Modulo, il me semble :lol:

Et finalement, qu'est-ce qu'un nombre pair, sinon un nombre divisible par 2 :wink:

Publié : lun. 25/oct./2004 20:36
par comtois
sans doute parce que le modulo est deux fois plus lent :)

Code : Tout sélectionner

a = 3 
b = 6 
c=10000000
temps=ElapsedMilliseconds()
For i=1 To c
a & 2 
b & 2 
Next i
total = ElapsedMilliseconds()-temps
Debug total

temps=ElapsedMilliseconds()
For i=1 To c
  a % 2 
  b % 2 
Next i
total = ElapsedMilliseconds()-temps
Debug total

Publié : lun. 25/oct./2004 20:51
par Chris
Meuuuh non!!! , à peine une seconde de différence entre les deux

Publié : mar. 26/oct./2004 6:23
par Anonyme2
Chris a écrit :Denis, pourquoi a & 1
Et bien il faut pour comprendre reprendre la correspondance décimal/bianire.

Je vais prendre quelques nombres simples.


de décimal en binaire
0 --> 0000
1 --> 0001
2 --> 0010
3 --> 0011
4 --> 0100
5 --> 0101
6 --> 0110
7 --> 0111
etc

si je fait un & 1 avec ces nombres (Et logique)
0 --> 0000 & 0001 = 0000
1 --> 0001 & 0001 = 0001
2 --> 0010 & 0001 = 0000
3 --> 0011 & 0001 = 0001
4 --> 0100 & 0001 = 0000
5 --> 0101 & 0001 = 0001
6 --> 0110 & 0001 = 0000
7 --> 0111 & 0001 = 0001
En regardant bien, tous les nombres impairs ont le bit de poids faible toujours à 1 et les nombres pairs ce même bit toujours à 0. Il suffit donc de tester ce bit avec un ET logique de valeur 1 pour trouver ou non la parité. Ceci est valable quel que soit le nombre.

Publié : mar. 26/oct./2004 14:06
par Le Soldat Inconnu
Génial, ton idée Denis :D

Publié : mar. 26/oct./2004 14:15
par Chris
Le Soldat Inconnu a écrit :Génial, ton idée Denis :D
Ouais, et en plus, c'est nettement plus rapide.

1 à 1,5 seconde de différence, c'est quand même pas rien, quand onvoit que pour certains code, il y en a qui chipotent pour 2 ou 3 millisecondes sur le même nombre de boucles. :lol:

Publié : mar. 26/oct./2004 14:17
par Le Soldat Inconnu
2 ou 3 millisecondes
c'est significatif ça 8O :roll:

Publié : mar. 26/oct./2004 14:30
par Dr. Dri
Denis a écrit :si je fait un & 1 avec ces nombres (Et logique)
Concretement, si j'avais osé dire ca devant mon prof d'électronique je me serait fait trucider (ca remonte à quelques années maintenant ^^)

c'est surtout pas un et "logique" mais plutot binaire puisque comme tu l'as montré il applique le ET à chaque bit des deux nombres...

un et logique (&& en C, And en PB) teste à faux... faux c'est 0, vrai c'est tout le reste...

Code : Tout sélectionner

A = %01 ;A=1
B = %10 ;B=2

;Test binaire, il va retourner faux car A et B n'ont aucun 1 en commun
If A&B
  Debug "Binaire"
EndIF

;Test logique, il va retourner vrai car ni A ni B n'est faux, n'est égal à zéro
If A And B
  Debug "Logique"
Endif
Dri

Publié : mar. 26/oct./2004 15:22
par Anonyme2
Tout à fait Dri, c'est une erreur de langage de ma part mais bon, je ne suis plus à ça près :mrgreen: