OVH Cloud OVH Cloud

Conversion Entier en tableau de Boolean

3 réponses
Avatar
Franck Siedeler
Bonjour,

Je suis à la recherche d'une fonction (optimisée) permettant de convertir un
nombre entier (16 bits)
en un tableau de boolean.
Je m'explique :
J'ai un entier (par ex : 13) qui correspond en binaire à 00000000 00001101.
J'aimerai avec une fonction entrer mon entier (13) et en sortir un tableau
de dimension(0-15) de boolean du style :

monTableau(0) = True (1)
monTableau(1) = False (0)
monTableau(2) = True (1)
monTableau(3) = True (1)
monTableau(4) = False (0)
monTableau(5) = False (0)
monTableau(6) = False (0)
...
monTableau(15) = False (0)

J'ai déjà fait ceci (ça marche), mais je ne pense pas que se soit très
optimisé !

Dim tabbits(15) As Boolean
Dim monEntier As Integer

monEntier = 13
tabbits = DecToBin(monEntier)

Public Function DecToBin(ByVal dec As Integer) As Boolean()
Dim x As Integer = 0
Dim TabTemp(15) As Boolean

Do
If (dec /2) - Int(dec/2) <> 0 Then
TabTemp(x) = True
Else
TabTemp(x) = False
End If
dec = Int(dec/2)
x = x +1
Loop Until dec<1
DecToBin = TabTemp

End Function



Une idée, un bout de code...?

Merci

Franck.

3 réponses

Avatar
Ambassadeur Kosh
> J'ai déjà fait ceci (ça marche), mais je ne pense pas que se soit très
optimisé !



effectivment. oriente toi vers les nombres entiers. la division entiere, et
le reste (operateur mod, dit modulo) vont te permettre de remplacer
efficacement (dec /2) - Int(dec/2) et d'enrichir fortement le potentiel du
possible.

sinon, tu peux la jouer comme ça

t[0] = (n & 1)!=0 ;
t[1] = (n & 2)!=0 ;
t[2] = (n & 4)!=0 ;
t[3] = (n & 8)!=0 ;
t[4] = (n & 16)!=0 ;
...

ou alors iterer, si tu preferes

for(int i=0;i<16;i++)
{
int reste = n % 2 ; // calcul du reste de la div par 2

// le if true else false est à jetter de maniere générale
bool bit = reste != 0 ;
t[i] = bit ;

// décaler à droite de n bits, c'est diviser par 2 puissance n
n = n/2 ; // ou n = n >> 1 ;
}

si tu presumes que ton tableau est rempli de 0 au départ, tu peux meme la
jouer comme ça

for(int i=0 ; n>0 ; i++)
{
// assure toi juste que n a bien une capacité couverte par ton tableau
...
}
Avatar
Franck Siedeler
Merci Ambassadeur Kosh,

Mais je n'arrive pas écrire ça en VB.NET :
t[0] = (n & 1)!=0
c'est le != qui pose problème.
ca veut dire quoi != ???

Franck

"Ambassadeur Kosh" a écrit dans le message news:
O#$
> J'ai déjà fait ceci (ça marche), mais je ne pense pas que se soit très
> optimisé !

effectivment. oriente toi vers les nombres entiers. la division entiere,


et
le reste (operateur mod, dit modulo) vont te permettre de remplacer
efficacement (dec /2) - Int(dec/2) et d'enrichir fortement le potentiel du
possible.

sinon, tu peux la jouer comme ça

t[0] = (n & 1)!=0 ;
t[1] = (n & 2)!=0 ;
t[2] = (n & 4)!=0 ;
t[3] = (n & 8)!=0 ;
t[4] = (n & 16)!=0 ;
...

ou alors iterer, si tu preferes

for(int i=0;i<16;i++)
{
int reste = n % 2 ; // calcul du reste de la div par 2

// le if true else false est à jetter de maniere générale
bool bit = reste != 0 ;
t[i] = bit ;

// décaler à droite de n bits, c'est diviser par 2 puissance n
n = n/2 ; // ou n = n >> 1 ;
}

si tu presumes que ton tableau est rempli de 0 au départ, tu peux meme la
jouer comme ça

for(int i=0 ; n>0 ; i++)
{
// assure toi juste que n a bien une capacité couverte par ton tableau
...
}




Avatar
Ambassadeur Kosh
"Franck Siedeler" a écrit dans le message
de news: %
Merci Ambassadeur Kosh,

Mais je n'arrive pas écrire ça en VB.NET :
t[0] = (n & 1)!=0
c'est le != qui pose problème.
ca veut dire quoi != ???



c'est le NotEqual, <>, pas = ...
désolé, j'ecris C#...