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 :

Opérateurs binaires, comportement


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut Opérateurs binaires, comportement
    Bonjour,

    J'effectue des manipulations sur des couleurs dans un format non standard. ABGR au lieu de ARGB.
    Mes couleurs sont stockées sous la forme d'un numeric en base de donnée et je les récupères sans problème dans un uint (au debug la valeur affichée est bonne)

    Pour retransformer mon uint en 3 couleurs plus alpha j'ai une méthode qui fonctionne en C++ mais qui a un comportement différent en C#:

    en C++ : couleur noir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // fabrication du noir à partir des valeurs décimales :
    unsigned int a = 255;
    unsigned int b = 0;
    unsigned int g = 0;
    unsigned int r = 0;
    unsigned int cl = ((a&0xff) << 24) | ((b&0xff) << 16)  | ((g&0xff) << 8)  | (r&0xff);
    //-> cl = 4278190080
    // décomposition du noir en 4 valeurs décimales :
    a = cl >> 24;
    b = (cl - (a << 24)) >> 16;
    g = (cl - (a << 24) - (b << 16)) >> 8;
    r = (cl - (a << 24) - (b << 16) - (g << 8));
    après passage dans ce code,
    a vaut 255 (alpha opaque 100%)
    b, g et r valent tous 0 (couleur noir)
    le même code en C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    uint cl = Convert.ToUInt32(param); // cl vaut bien 4278190080, donc noir opaque
    uint a = cl >> 24;
    uint b = (cl - (a << 24)) >> 16;
    uint g = (cl - (a << 24) - (b << 16)) >> 8;
    uint r = (cl - (a << 24) - (b << 16) - (g << 8));
    me donne :
    a : 254
    b : 255
    g : 255
    r : 196

    D'où ma question : Y a-t-il un comportement différent des opérateurs binaires entre C# et C++ ?

    J'ajoute que si je prends une couleur très proche du noir
    blue : 1 & green : 1 & red : 1 & alpha : 255, il n'y a aucun problème en C# ...
    Les autres couleurs que j'ai testées ne posent à priori pas de problème

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Ce code C#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    uint cl = 4278190080;
    uint a = cl >> 24;
    uint b = (cl - (a << 24)) >> 16;
    uint g = (cl - (a << 24) - (b << 16)) >> 8;
    uint r = (cl - (a << 24) - (b << 16) - (g << 8));
    me renvoie bien les valeurs 255, 0, 0, 0, chez moi. Tu es sûr que Convert.ToUInt32(param) renvoie bien 4278190080 ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    ah étrange,

    je vais re-vérifier minutieusement ...

    Effectivement, j'avais dû mal taper la valeur en base de données et sur un nombre aussi grand l'erreur est assez dur à voir pour un dyslexique 4278190020.

    désolé d'avoir crié au secours pour rien

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

Discussions similaires

  1. Question opérateurs binaires
    Par Evocatii dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 15/01/2009, 19h44
  2. [JSTL] Opérateurs binaires dans les JSP
    Par gwinyam dans le forum Struts 1
    Réponses: 4
    Dernier message: 16/07/2008, 15h59
  3. Opérateur binaire en Delphi et en php
    Par Morvan Mikael dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2008, 09h29
  4. Réponses: 8
    Dernier message: 03/11/2007, 18h01
  5. Opérateurs binaires
    Par Zenol dans le forum C++
    Réponses: 6
    Dernier message: 05/03/2006, 02h43

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