OVH Cloud OVH Cloud

Fonction NOT

18 réponses
Avatar
Raymond Fournier
Comment fait -on pour que 1 devient 0, ou 0 devient 1. J' ai essayé
avec not, mais 1 devient -1.

Merci de vos réponce

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

8 réponses

1 2
Avatar
Raymond Fournier
Barsalou a formulé ce lundi :
Bonsoir
C'est pourtant simple
i = 1- i

Transforme 1 en 0 et 0 en 1



Encore un grand Merci.
Raymond Fournier :D

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
Clive Lumb
"Patrice Henrio" a écrit dans le message de
news:
Et pourquoi ne pas traduire directement la formule mathématiques
Nouvelle valeur = 1-ancienne valeur
qui transforme bien 1 en 0 et 0 en 1
Function Phi( x as Integer) as integer
Phi=1-x
End Function




Et là je suis passé à coté .... allègrement ... de la solution la plus
élégante.

Mais je me demande si Raymond n'a pas besoin du "NOT" pour faire des
conversions d'octet style 01010101 -> 10101010. Dans quel cas l'operateur
XOR avec 11111111 pourrait convenir.

Clive
Avatar
Clive Lumb
"ng" a écrit dans le message de
news:
0<>b équivaut à b car b=0 équivaut à Not b
on a donc un booléan (et il a été montré (par des benchmarks) que ce genre
de test : If Búlse/B=true/B=0/b<>0 pour des booléans est 70% plus lent


que
simplement If b/Not b)

-not(b<>0) équivaut donc à -Not b
on note qu'il y a une conversion (implicite) de booléan en integer
donc autant la faire explicitement (c'est aussi rapide) : -CInt(b) ce que


le
compilateur interprete exactement de la même facon que CInt(b) * -1 (cf


mon
message).




Nicolas,
En es-tu sûr... ?
Chez moi -Not b rend 2 !
Ce qui est logique car NOT inverse tous les bits, donc NOT 1, où 1 est un
entier (implicite), est en effet le complément négatif car le bit le plus
significatif (qui est le bit de signe) est aussi inversé.

Rappel: dans VB les entiers sont stockés sur 16 bits en utilisant le 16eme
bit pour la signe. Pour trouver le négatif d'un numéro on inverse tous les
bits puis on ajoute 1. (voir par exemple
http://www.commentcamarche.net/base/representation.php3)
On peut s'en rendre compte simplement dans VB en créant la fonction "moins"

Public Function Moins(A) 'Marche pour entier et longs
Moins = 1 + Not A
End Function

On peut noter que si A est un byte (donc non signé) le NOT rend le
complément de 255, donc NOT 0 est 255

Clive
Avatar
LE TROLL
Oh, je n'ai pas fait attention, j'ai voulu mettre le principe,
c'est-à-dire de sauter la seconde ligne quand la première était bonne...
L'if est mieux, évidemment...
------

"Kiriasse" a écrit dans le message de news:
4207781d$0$2154$
Curieux emploi de GoTo...

J'aurais écrit plus simplement :
Dim I As Integer

If I = 1 Then
I = 0
ElseIf I = 0 Then
I = 1
End If

Ou

Select Case I
Case 0: I = 1
Case 1: I = 0
End Select

Kiriasse
www.kiriasse.fr

== > "LE TROLL" <le a écrit dans le message de news:

if x = 1 then x = 0 goto fin
x = 1
fin:
-------------------



== >> "Raymond Fournier" <duracelle(Enlever-ceci)@sympatico.ca> a écrit dans le
message de news:
Comment fait -on pour que 1 devient 0, ou 0 devient 1. J' ai essayé avec
not, mais 1 devient -1.







Avatar
ng
Oups au temps pour moi, j'ai oublié que ton b n'était pas booléan.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Clive Lumb wrote:
"ng" a écrit dans le message de
news:
0<>b équivaut à b car b=0 équivaut à Not b
on a donc un booléan (et il a été montré (par des benchmarks) que ce
genre de test : If Búlse/B=true/B=0/b<>0 pour des booléans est 70%
plus lent que simplement If b/Not b)

-not(b<>0) équivaut donc à -Not b
on note qu'il y a une conversion (implicite) de booléan en integer
donc autant la faire explicitement (c'est aussi rapide) : -CInt(b)
ce que le compilateur interprete exactement de la même facon que
CInt(b) * -1 (cf mon message).




Nicolas,
En es-tu sûr... ?
Chez moi -Not b rend 2 !
Ce qui est logique car NOT inverse tous les bits, donc NOT 1, où 1
est un entier (implicite), est en effet le complément négatif car le
bit le plus significatif (qui est le bit de signe) est aussi inversé.

Rappel: dans VB les entiers sont stockés sur 16 bits en utilisant le
16eme bit pour la signe. Pour trouver le négatif d'un numéro on
inverse tous les bits puis on ajoute 1. (voir par exemple
http://www.commentcamarche.net/base/representation.php3)
On peut s'en rendre compte simplement dans VB en créant la fonction
"moins"

Public Function Moins(A) 'Marche pour entier et longs
Moins = 1 + Not A
End Function

On peut noter que si A est un byte (donc non signé) le NOT rend le
complément de 255, donc NOT 0 est 255

Clive


Avatar
Aski
Bonjour eric,

En tous cas tu es le gagnant absolu de ce concours.
Beaucoup d'entre nous somme honteux de ne pas avoir trouvé.

Aski

"Barsalou" a écrit dans le message de
news:
Bonsoir
C'est pourtant simple
i = 1- i

Transforme 1 en 0 et 0 en 1


Avatar
Patrice Henrio
Battu de cinq minutes ! Damned !
"Barsalou" a écrit dans le message de
news:
Bonsoir
C'est pourtant simple
i = 1- i

Transforme 1 en 0 et 0 en 1


Avatar
Clive Lumb
"ng" a écrit dans le message de
news:%23dv%
Oups au temps pour moi, j'ai oublié que ton b n'était pas booléan.




Pas de problème, j'ai fait des bien plus grosses.
De toute façon tout cela m'a permis de fouiller un peu sous le capot de VB.

Clive
1 2