bonjour,

je viens chercher un éclaircissement sur une erreur qui survient lors de manipulation de bit sur un ulong ( donc non signé )

je voulais utiliser la fonction suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
   Public Shared Function find_bit_poids_faible(ByVal rufus As ULong) As ULong
 
 
         Return CULng(rufus And (-(rufus)))
 
 
        End Function
elle me donne un jolie depassement de capacité pour des valeurs superieur a la valeur 60 ( ou 61 je c plus du coup )

que l on peut obtenir de la maniere suivante par exemple :

ulng(1) << 60


donc ce dépassement arithmétique, m oblige a faire la fonction suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
  Public Shared Function find_bit_poids_faible(ByVal rufus As ULong) As ULong
                        Return ((rufus And (rufus - CULng(1)) Xor rufus))
        End Function

ma question : pourquoi ??????????
le "-" alors que c un ulong ? ( conversion implicite en long ..???? )

question subsidiaire, je veux limiter au maximum les operations,

premiere fonction un "and"
seconde un "and" "xor" et un " -"

une astuce pour que la première fonctionne ( la valeur finale ne dépasse jamais la valeur max d un ulong ...)


d avance merci