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

Macros et VBA Excel Discussion :

Pour ma culture : Pourquoi un Boolean est sur 2 octets ? [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut Pour ma culture : Pourquoi un Boolean est sur 2 octets ?
    Bonjour tout le monde,

    Je me pose une question :
    Pourquoi en VBA, la variable Boolean est sur 2 octets ?
    C'est juste pour satisfaire ma curiosité je dormirais aussi bien ce soir si je n'ai pas de réponse


    J'ai un début de réponse avec le tableau suivant :
    Type de données Taille en mémoire Quand utiliser ce type de données
    Byte 1 octet Pour un compteur allant de 0 à 255.
    Boolean 2 octets Pour retourner Vrai True (-1) ou Faux False (0).
    Integer 2 octets Pour un compteur allant -32 768 à 32 767.
    Extrait du tuto suivant : Apprendre la programmation en VBA pour EXCEL par la pratique - Première partie

    Je devine donc que comme True est assimilé à -1, il faut 2 octets pour le représenter.


    Pourtant on utilise souvent 1 pour vrai et 0 pour faux quand on parle de logique binaire. Non ?!?
    Dans ce cas 1 octet pourrait suffire.

    Alors pourquoi ce choix de -1 pour représenter True en VBA ?
    Est-ce exclusif au VBA ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    la taille minimal est un 1 octet, au delà c'est de multiple de 2.

    un Byte n'est pas signé (-1)

    je ne dirais pas que la logique Française est mieux que a logique américaine!

    mais les Américain travail en logique négative! et c'est au non de cette logique négative que par convention le true est = -1

    Français False=0 Volte; True = 5 Volte!

    Américain False=5 Volte; True = 0 Volte!

    les composants électronique on toujours 5 Volte en entré par défaut cest comme ça
    en cas de coupure de piste sur le circuit imprimé la valeur est toujours false!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print Cbool(123456789.987654321)
    un booléen accepte 0 pour false et n'importe quel valeur numérique pour true! seule le false est teste en opposition au true!

    si je veux tester si au moins une checkbox a true!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    True + True + False +True = True
    + = Or; * = AND (algèbre de Boole)


    en électronique on considère 3 état!
    0=false; 1= true; Ф= état indéterminé!

    si je devais définir un schéma électronique pour faire clignoter une ampoule en fonction de position de la manette du clignotant Droite=0; gauche=1 le deux= Ф (position impossible alors je choisis ce qui pour mes équations booléenne est le mieux pour moi)
    Dernière modification par Invité ; 16/09/2016 à 15h02.

  3. #3
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Top Robert !

    Encore une fois j'apprend pleins de trucs !
    Merci

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Salut !

    Citation Envoyé par antonysansh Voir le message
    Pourtant on utilise souvent 1 pour vrai et 0 pour faux
    Sauf depuis le BASIC originel, le grand-père du VBA ! Cela a toujours été -1 depuis plus de 30 ans …
    Beaucoup d'instruction du VBA général non pas évoluées ou guère depuis et ce afin d'assurer la compatibilité.

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai une base de données sur Sql server.

    Pour ne pas aller constamment sur la vm qui contient la base de données, j'ai lié mes tables Sql server à Access.

    Quand je veux mettre 1 dans un champ Access me le converti en -1.

    Quand je met 1 dans Sql Server il me garde 1 ! C'est plus pratique d'écrire 1 que -1.

    Quand je fais une requête je dois choisir <>0 car si non il me retourne tous les 1 ou tous les -1 pas les deux!

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    La réponse est dans la façon d'écrire les nombres en binaire.

    En VB(A), un type Byte est non signé. Ses valeurs possibles vont de 0 à 255.
    Le plus petit type numérique signé est l'Integer (2 octets) dont les valeurs possibles sont comprises entre -32 768 et 32 767.
    Pour indiquer le signe, on positionne à 1 le premier bit de l'octet de poids fort.

    01111111 11111111 en binaire vaut 32 767 en décimal et
    10000000 00000000 en binaire vaut -32 768 en décimal.

    De même,
    00000000 00000000 en binaire vaut 0 en décimal et
    11111111 11111111 en binaire vaut -1 en décimal.

    Visiblement, à l'époque de la création du VB(A) il a été fait le choix de positionner tous les bits à 0 pour False et tous les bits à 1 pour True.
    Ce qui donne les valeurs décimales 0 et -1.

    Pour ceux qui se poseraient la question de savoir pourquoi -1 s'écrit 11111111 11111111 et pas 10000000 00000000, c'est, tout simplement, pour que le processeur n'ait pas besoin d'un traitement des soustractions.
    En effet, en arithmétique, à la place de soustraire, on peut additionner l'opposé du nombre.
    Si on reprend les valeurs limites de l'Integer, 32 767 - 32 768 peut s'écrire 32 767 + (-32 768) et vaut -1.
    Si on reprend les représentations binaires, 01111111 11111111 + 10000000 00000000 vaut 11111111 11111111 soit -1 en décimal.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Historiquement c'est lié à l'électronique!

    Les mémoires rom était des aiguillage a diode munis d'un fusible.

    Par un courant électrique de 21 voltes on faisait sauté le fusible positionnant la valeur a 0.

    Un rom vierge était à FFFF que des 1 on ne programmait que le passage à 0 ça réduisait le temps de programmation car les registres non affecté n'étaient pas claqué à 21 voltes!


    http://www.courstechinfo.be/Hard/Memoire.html

    J'ai commencé à travailler en 1978 4 ans avant qu'IBM sorte le premier Personal Computer.
    Après pas étonnant si Chirac demande "qu'entendez vous par prendre la souris"!

    L'informatique était un travail électronicien d'ou un jargon en relation avez l'électronique!

    Avec un cursus électronicien j'ai rencontré beaucoup de problème à faire mon trou dans l'informatique
    Dernière modification par Invité ; 19/09/2016 à 09h50.

  8. #8
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,

    L'unité de tension électrique, c'est Volt, pas volte!

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

Discussions similaires

  1. Réponses: 128
    Dernier message: 26/01/2013, 10h46
  2. pourquoi mon virtualdevice est lent sur un pc rapide ?
    Par clavier12AZQSWX dans le forum Android
    Réponses: 8
    Dernier message: 15/06/2012, 18h47
  3. Réponses: 0
    Dernier message: 30/11/2010, 10h28

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