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

10 réponses

1 2
Avatar
Clive Lumb
"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.

Merci de vos réponce

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



Le boolean "True" dans VB a la valeur -1.
Donc l'opérateur NOT rend -1 pour 0 et 0 pour -1 (ou toute autre valeur non
0).
Sur des non-booléans, NOT inverse les bits.

Pour faire ce que tu veux, essayer:

Public Function NotMath(Var As Boolean) As Integer
NotMath = -Not Var
End Function

Clive
Avatar
LE TROLL
Salut,

Comme dit, je crois que ça inverse la valeur, or le contraire de -1 est
1, et pour les boolean de True c'est False...

Soit:
dim x as boolean
x = Not x ' Not inverse un valeur booléenne

Pour inverser une valeur classique tu peux par les maths faire:
dim y
y = 1
y = y * - 1
(1 devient -1 et -1 devient 1)

In fine, dans ton cas je mettrais des if, soit:

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.

Merci de vos réponce

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



Avatar
Kiriasse
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
Raymond Fournier
Il se trouve que Kiriasse a formulé :
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.







Merci de vos réponses

Raymond Fournier

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

Et pourquoi pas Abs(i -1)
Il faudrait voir quel est le moyen le plus rapide en répétant l'opération un
nombre suffisant de fois.

Aski

"Raymond Fournier" <duracelle(Enlever-ceci)@sympatico.ca> a écrit dans le
message de news:
Il se trouve que Kiriasse a formulé :
> 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.

Merci de vos réponses

Raymond Fournier

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



Avatar
ng
> If I = 1 Then
I = 0
ElseIf I = 0 Then
I = 1
End If



If I Then I = 0 Else I = 1

Mais il vaut mieux faire ce genre d'opération via les boolean

Dim b As Boolean

b = True
b = Not B

Pour la convertion en Int/Long en utilise CInt() ou CLng()
Et on fait attention car True = -1 et False = 0 (et même d'ailleurs False =
0 et True tout le reste).

Donc si on veut des 1 et des 0 :
Dim i As Integer
i = CInt(b) * -1
'//ou
i = Abs(CInt(b))

--
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/

Kiriasse wrote:
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
Clive Lumb
"ng" a écrit dans le message de
news:
> If I = 1 Then
> I = 0
> ElseIf I = 0 Then
> I = 1
> End If

If I Then I = 0 Else I = 1

Mais il vaut mieux faire ce genre d'opération via les boolean

Dim b As Boolean

b = True
b = Not B

Pour la convertion en Int/Long en utilise CInt() ou CLng()
Et on fait attention car True = -1 et False = 0 (et même d'ailleurs False


> 0 et True tout le reste).

Donc si on veut des 1 et des 0 :
Dim i As Integer
i = CInt(b) * -1
'//ou
i = Abs(CInt(b))



Je préfère toujours le mien... qui peut se réduire à
i = -not (0<>b)

Pas besoin de conversion... et mon avis plus rapide (Zoury !!!!)

Clive
Avatar
ng
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 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:
If I = 1 Then
I = 0
ElseIf I = 0 Then
I = 1
End If



If I Then I = 0 Else I = 1

Mais il vaut mieux faire ce genre d'opération via les boolean

Dim b As Boolean

b = True
b = Not B

Pour la convertion en Int/Long en utilise CInt() ou CLng()
Et on fait attention car True = -1 et False = 0 (et même d'ailleurs
False = 0 et True tout le reste).

Donc si on veut des 1 et des 0 :
Dim i As Integer
i = CInt(b) * -1
'//ou
i = Abs(CInt(b))



Je préfère toujours le mien... qui peut se réduire à
i = -not (0<>b)

Pas besoin de conversion... et mon avis plus rapide (Zoury !!!!)

Clive


Avatar
Barsalou
Bonsoir
C'est pourtant simple
i = 1- i

Transforme 1 en 0 et 0 en 1
Avatar
Patrice Henrio
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


"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 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:
If I = 1 Then
I = 0
ElseIf I = 0 Then
I = 1
End If



If I Then I = 0 Else I = 1

Mais il vaut mieux faire ce genre d'opération via les boolean

Dim b As Boolean

b = True
b = Not B

Pour la convertion en Int/Long en utilise CInt() ou CLng()
Et on fait attention car True = -1 et False = 0 (et même d'ailleurs
False = 0 et True tout le reste).

Donc si on veut des 1 et des 0 :
Dim i As Integer
i = CInt(b) * -1
'//ou
i = Abs(CInt(b))



Je préfère toujours le mien... qui peut se réduire à
i = -not (0<>b)

Pas besoin de conversion... et mon avis plus rapide (Zoury !!!!)

Clive






1 2