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

C# Discussion :

Directive compilateur pour opérations binaires


Sujet :

C#

  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 257
    Par défaut Directive compilateur pour opérations binaires
    Bonjour,

    Pour des opérations binaires je souhaite que le compilateur ne supprime pas les zéros devant un entier. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int x = 80 & 07777;
    Le résultat de x est 64 (?) car le compilateur supprime le zéro devant 7777. Or en C++ cela donnerait 80 (!) car le
    compilateur ne supprime pas le ou les zéros.
    Y-a-til une directive ou une fonction en C# qui fasse de même ?
    Bien sûr sans manipulation de String dans tout ça car cela doit rester rapide.
    Merci.

    Salutations.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 456
    Par défaut
    Bonjour,
    Je ne comprends pas bien ce que tu cherches. Pour un entier (en fait pour n'importe quelle valeur numérique), les 0 à gauches avant la virgule ne sont pas significatifs, qu'ils soient là ou pas ne change rien. 7, 07 ou 007 c'est la même chose.
    Si je prends tes deux valeurs, et que je les convertis en binaire, j'obtiens:
    00000000*01010000‬
    *0001111001100001‬
    J'ai ajouté des 0 à 80 pour avoir le même nombre de digits, c'est plus simple pour la suite.
    Un ET binaire me donne donc:
    0000000001000000
    J'ai bien 64.
    Tu peux nous montrer la différence qui existe pour toi en binaire entre 07777 et 7777 ?

    Tatayo.

  3. #3
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Bonjour,

    le nombre de 0 a gauche ne sert a rien, tu peux écrire 0000000007777 si ça te chante, l'aspect important, c'est que 0777 en C++ signifie que c'est un nombre octale (de base 8).

    Du coup, tu fais plutôt 80 & 4095, ce qui donne effectivement 80.

    Petit aperçu d'une doc sur le sujet :


  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 257
    Par défaut
    tatayo > je comprends parfaitement ce que tu veux dire mathématiquement (binaire) ce que je recherche c'est
    reproduire un résultat du compil C++ en C# . Si tu crées une simple appli console C++ et que tu colles ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include "stdafx.h"
    #include <string>
     
    int main()
    {
    	int x  = (80 & 07777);
            int y  = (80 & 7777);
    	printf("%d\n", x);
            printf("%d\n", y);
    	system("pause");
    }
    ..tu verras la différence.

    PixelJuice > c'est exactement ce que je recherchais, merci !

    Salutations.

  5. #5
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Le problème n'a rien à voir avec les opérations binaires. En C++, un nombre précédé d'un 0 est un nombre octal et non un nombre décimal.

    Il n'y a pas cette notion de nombre octal en C#. Donc impossible en l'état.

    Eventuellement, tu peux passer par la fonction Convert.ToInt32, qui permet de préciser la base de la source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int x = 80 & Convert.ToInt32("07777", 8);

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 257
    Par défaut
    François DORIN,

    Je connaissais la fonction de conversion mais je ne souhaitais pas allourdir le code, je pensais
    qu'il y avait peut-être une directive compilateur qui permettait de traiter les entiers comme
    en c++. Après la réponse de PixelJuice, je passe par un convertisseur octal<>décimal.

    Salutations.

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

Discussions similaires

  1. "Meilleur compilateur pour langage C"
    Par ghx13 dans le forum C
    Réponses: 19
    Dernier message: 24/01/2005, 10h49
  2. Quelle compilateur pour le 64 bits ?
    Par yarp dans le forum C++Builder
    Réponses: 12
    Dernier message: 10/09/2004, 18h42
  3. Cours, tutoriels, livres et compilateurs pour Visual C++
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 0
    Dernier message: 21/07/2004, 12h55
  4. Réponses: 0
    Dernier message: 21/07/2004, 12h30
  5. [LG] directives compilateur
    Par FB dans le forum Langage
    Réponses: 3
    Dernier message: 20/03/2004, 15h57

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