IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

operateurs biwise et ulong


Sujet :

Framework .NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 89
    Par défaut operateurs biwise et ulong
    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

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je sais pas trop pourquoi tu te lances dans des trucs si compliqués... pour récupérer le bit de poids faible, il suffit de faire ça :

    (j'adore le nom de ta variable )

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 89
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je sais pas trop pourquoi tu te lances dans des trucs si compliqués... pour récupérer le bit de poids faible, il suffit de faire ça :

    (j'adore le nom de ta variable )
    pour la variable, manque d inspiration ...

    sinon, ne retourne pas le bit de poids faible test a appuis ...

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par oliverell62 Voir le message
    pour la variable, manque d inspiration ...

    sinon, ne retourne pas le bit de poids faible test a appuis ...
    J'veux bien voir le test car ca me parait bizarre la quand même

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par oliverell62 Voir le message
    sinon, ne retourne pas le bit de poids faible test a appuis ...
    Ben on a pas du faire les mêmes tests... ou alors on a pas la même définition du bit de poids faible.

    Sinon, encore plus simple :

    (le bit de poids faible est 0 pour les nombres pairs, 1 pour les nombres impairs)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 89
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ben on a pas du faire les mêmes tests... ou alors on a pas la même définition du bit de poids faible.

    Sinon, encore plus simple :

    (le bit de poids faible est 0 pour les nombres pairs, 1 pour les nombres impairs)
    nous n avons effectivement pas la meme definition
    http://fr.wikipedia.org/wiki/Bit_de_poids_faible

    en fait je veux recuperer le 1 le plus bas possible ...


    genre
    000011110001000000011000000010000
    donnera :
    000000000000000000000000000010000

    j avais cru comprendre que c 'était ca le bit poids faible
    toutes mes excuses ...

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Function Func(figure As ULong) As ULong
    	Dim i As Integer = 0
    	While figure Mod 2 Is 0
    		figure = figure >> 1
    		i += 1
    	End While
    	Return Math.Pow(2, i)
    End Function

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 89
    Par défaut
    désolé d avoir tardé a répondre ...

    avec ton astuce PitMaverick78 j ai deux erreur de ce type
    L'opérateur 'Is' n'accepte pas d'opérandes de type 'Long'. Les opérandes doivent être de types référence ou Nullable.
    je n ai pas chercher a résoudre je suis revenu sur ma solution qui est surement la plus rapide

    pour information, j ai teste ma première idée sous c++ que j ai mis en dll exploitable pour ma solution

    un truc comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public:
    		static unsigned long int find_first_1(unsigned long int x)
    {
    return x & - x;
        }
    ca retourne egalement une erreur

    je reprend donc ma solution initiale

    merci a ceux qui se sont penché sur la question

    enjoy

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Erf c'est du C# converti en VB.net je pense qu'il faut remplacer Is par = ou == (je sais pas comment on teste l'égalité en vb)

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 89
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Erf c'est du C# converti en VB.net je pense qu'il faut remplacer Is par = ou == (je sais pas comment on teste l'égalité en vb)

    connais pas le c#
    je fais le test de vitesse pour voir ce que ca donne

    enjoy

    merci


    edit : ca fonctionne mais je perds en vitesse comme je le pensais
    de 145 kn /s je passe a 76 kn / s

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. redirection operateur flue >> appel system
    Par philippe V dans le forum MFC
    Réponses: 9
    Dernier message: 16/03/2005, 18h01
  2. PHP SQL =>erreur de syntaxe (operateur absent)
    Par snipes dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 14h09
  3. operateur de condition
    Par Jean-Matt dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 15h56
  4. [langage] opérateur booleen
    Par louisis dans le forum Langage
    Réponses: 4
    Dernier message: 30/06/2004, 16h12
  5. [langage] l'operateur tr///
    Par March' dans le forum Langage
    Réponses: 4
    Dernier message: 03/03/2003, 21h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo