FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Convertisseur pour nombres entiers signés Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Convertisseur pour nombres entiers signés Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Convertisseur pour nombres entiers signés Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Convertisseur pour nombres entiers signés Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Convertisseur pour nombres entiers signés Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Convertisseur pour nombres entiers signés Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Convertisseur pour nombres entiers signés Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Convertisseur pour nombres entiers signés Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Convertisseur pour nombres entiers signés Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Convertisseur pour nombres entiers signés Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Convertisseur pour nombres entiers signés Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Convertisseur pour nombres entiers signés Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Convertisseur pour nombres entiers signés Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Convertisseur pour nombres entiers signés Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Convertisseur pour nombres entiers signés Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-55%
Le deal à ne pas rater :
Friteuse sans huile – PHILIPS – Airfryer HD9200/90 Série 3000
49.99 € 109.99 €
Voir le deal

 

 Convertisseur pour nombres entiers signés

Aller en bas 
3 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur pour nombres entiers signés Empty
MessageSujet: Convertisseur pour nombres entiers signés   Convertisseur pour nombres entiers signés EmptyLun 27 Nov 2017 - 18:19

Bonjour à tous !

Suite à une remarque pertinente de Klaus au sujet de mon précédant convertisseur pour nombres entiers non signés,
je vous présente un deuxième convertisseur binaire vers décimal et hexadécimal pour les nombres entiers signés.

Convertisseur pour nombres entiers signés 122


Vous pouvez l'utiliser soit :

-pour un octet signé (8 bits), dans ce cas il faut utiliser les bits 0 à 7 et prendre en compte uniquement la première ligne de calcul.
Dans l'exemple ci dessus, le première ligne de calcul est celle qui mentionne : -128   0x80
Le premier nombre est la valeur décimale de l'octet, ici négative : -128
Le deuxième nombre est la valeur hexadécimale : 0x80
Le préfixe 0x indique que c'est un nombre exprimé en hexadécimal. Sa valeur est 80

Le préfixe est utilisé pour ne pas confondre un nombre décimal avec un nombre hexadécimal.
Ainsi, il est exact, pour un entier signé, de dire que 80 = -128   scratch  ! ! ? ?
Aïe : la confusion est là ! Il faut absolument indiquer que 80 est une valeur hexadécimale. On ajoute donc un préfixe.
Suivant les langages informatiques, ce préfixe peut être Ox, &h, h ... ou parfois un suffixe indiquant la base utilisée. Ici la base 16 appelée hexadécimale.
On écrira donc 0x80 = -128 (pour un entier signé sur 1 octet).

- pour un word signé (16 bits), dans ce cas il faut utiliser les bits 0 à 15 et prendre en compte la deuxième ligne de calcul. Mêmes remarques que ci-dessus.

- pour un dword signé (32 bits), dans ce cas tous les bits de 0 à 31 sont à utiliser avec la 3ème ligne de calcul. Avec toujours les mêmes remarques que ci-dessus.

A vous de faire des essais et voir comment fonctionnent les nombres entiers signés. Voir comment on obtient un nombre négatif, voir l'étendue d'un octet...

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC BINARY TO DECIMAL / HEXADECIMAL FOR SIGNED INTEGER
'  MARC - November 2017 - Panoramic v0.9.28.i12
'  http://panoramic-language.pagesperso-orange.fr/French/index.html
'  http://panoramic.top-forum.net
' ------------------------------------------------------------------------------
WIDTH 0, 900
HEIGHT 0, 400
LEFT 0,(screen_x-900)/2
TOP 0,(screen_y-400)/2
LABEL BitState, Reset
DIM i%, bit%, x, Poids%
DIM Result$, Hexa1$, Hexa2$, Hexa3$, Hexa4$, Hexa32$
DIM ButtonState%(32)
FONT_NAME 0,"Arial"
FONT_SIZE 0, 12
FOR i% = 1 TO 8
    BUTTON i%
    LEFT i%, 25*i%
    TOP i%, 110
    WIDTH i%, 25
    HEIGHT i%, 25
    ALPHA i%+100
    LEFT i%+100, (25*i%)+4
    TOP i%+100, 85
    WIDTH i%+100, 25
    HEIGHT i%+100, 25
    CAPTION i%+100,32-i%
NEXT i%
FOR i% = 9 to 16
    BUTTON i%
    LEFT i%, 10+(25*i%)
    TOP i%, 110
    WIDTH i%, 25
    HEIGHT i%, 25
    ALPHA i%+100
    LEFT i%+100, (25*i%)+14
    TOP i%+100, 85
    WIDTH i%+100, 25
    HEIGHT i%+100, 25
    CAPTION i%+100,32-i%
NEXT i%
FOR i% = 17 TO 24
    BUTTON i%
    LEFT i%, 20+(25*i%)
    TOP i%, 110
    WIDTH i%, 25
    HEIGHT i%, 25
    ALPHA i%+100
    LEFT i%+100, (25*i%)+24
    IF i% = 24 THEN LEFT i%+100, (25*i%)+28
    IF i% = 23 THEN LEFT i%+100, (25*i%)+28
    TOP i%+100, 85
    WIDTH i%+100, 25
    HEIGHT i%+100, 25
    CAPTION i%+100,32-i%
NEXT i%
FOR i% = 25 to 32
    BUTTON i%
    LEFT i%, 30+(25*i%)
    TOP i%, 110
    WIDTH i%, 25
    HEIGHT i%, 25
    ALPHA i%+100
    LEFT i%+100, (25*i%)+38
    TOP i%+100, 85
    WIDTH i%+100, 25
    HEIGHT i%+100, 25
    CAPTION i%+100,32-i%
NEXT i%
FOR i% = 1 to 32
    CAPTION i% , "0"
    ButtonState%(i%) = 0
NEXT i%
ALPHA 33
    TOP 33,35
    LEFT 33,135
    FONT_SIZE 33,16
    CAPTION 33,"BINARY TO DECIMAL / HEXADECIMAL FOR SIGNED INTEGER"
ALPHA 34
    TOP 34, 250
    LEFT 34, 250
    FONT_SIZE 34, 16
ALPHA 35
    TOP 35, 150
    LEFT 35, 250
    FONT_SIZE 35, 16
ALPHA 36
    TOP 36, 150
    LEFT 36, 250
    FONT_SIZE 36, 16
ALPHA 37
    TOP 37, 150
    LEFT 37, 250
    FONT_SIZE 37, 16
ALPHA 38
    TOP 38, 150
    LEFT 38, 250
    FONT_SIZE 38, 16
ALPHA 39
    TOP 39, 200
    LEFT 39, 250
    FONT_SIZE 39, 16
ALPHA 40
    TOP 40, 200
    LEFT 40, 250
    FONT_SIZE 40, 16
FOR i% = 41 to 44
BUTTON i%
    WIDTH i%, 100
    TOP i%,300
    LEFT i%,210*i%-8523
    CAPTION i%, "Reset "+STR$(45-i%)
    ON_CLICK i%,Reset
NEXT i%
FOR i% = 1 to 32
    ON_CLICK i%, BitState
NEXT i%
LINES()
END
' ------------------------------------------------------------------------------
BitState:
    i%=NUMBER_CLICK
    IF ButtonState%(i%) = 0
        ButtonState%(i%) = 1
        Caption i%, "1"
    ELSE
        ButtonState%(i%) = 0
        CAPTION i%,"0"
    END_IF
    Lines()    
    OctetDisplay()
    WordDisplay()
    DwordDisplay()
RETURN  
' ------------------------------------------------------------------------------
SUB OctetDisplay()
    DIM_LOCAL a$,j%
    x = 0
    FOR Bit% = 32 TO 25 STEP -1
        IF ButtonState%(Bit%) = 1 THEN x = x + POWER(2,32-Bit%)
    NEXT Bit%
    Hexa1$=HEX$(x)
    IF LEN(Hexa1$)=1 THEN Hexa1$="0"+Hexa1$
    IF ButtonState%(25)=1
        x=x-256
    END_IF    
    a$=STR$(x)+"    0x"+Hexa1$
    j%=TEXT_WIDTH(a$,35)
    LEFT 35, ((885-j%)/2)+313
    CAPTION 35, a$
END_SUB
' ------------------------------------------------------------------------------
SUB WordDisplay()
    DIM_LOCAL a$,j%
    x = 0
    FOR Bit% = 32 TO 17 STEP -1
        IF ButtonState%(Bit%) = 1 THEN x = x + POWER(2,32-Bit%)
    NEXT Bit%
    Hexa1$=HEX$(x)
    IF LEN(Hexa1$)=1 THEN Hexa1$="000"+Hexa1$
    IF LEN(Hexa1$)=2 THEN Hexa1$="00"+Hexa1$
    IF LEN(Hexa1$)=3 THEN Hexa1$="0"+Hexa1$
    IF ButtonState%(17)=1
        x=x-65536
    END_IF    
    a$=STR$(x)+"    0x"+Hexa1$
    j%=TEXT_WIDTH(a$,39)
    LEFT 39, ((885-j%)/2)+207
    CAPTION 39, a$
END_SUB
' ------------------------------------------------------------------------------
SUB DwordDisplay()
  DIM_LOCAL j%, k%, a$, b$
    x = 0
    FOR Bit% = 16 TO 1 STEP -1
        IF ButtonState%(Bit%) = 1 THEN x = x + POWER(2,16-Bit%)
    NEXT Bit%
    Hexa2$=HEX$(x)
    x = 0
    FOR Bit% = 32 TO 17 STEP -1
        IF ButtonState%(Bit%) = 1 THEN x = x + POWER(2,32-Bit%)
    NEXT Bit%
    Hexa1$=HEX$(x)
    IF LEN(Hexa1$)< 4 THEN Hexa1$=STRING$(4-LEN(Hexa1$),"0")+Hexa1$
    IF LEN(Hexa2$)< 4 THEN Hexa2$=STRING$(4-LEN(Hexa2$),"0")+Hexa2$
    x = 0
    Hexa32$=Hexa2$ + Hexa1$
    x=HEX(Hexa32$)
    Result$=""
    k%=0
    a$=STR$(x)
    j%=LEN(a$)
    FOR i%= j% TO 1 STEP -1
        k%=k%+1
        b$=MID$(a$,i%,1)
        Result$=b$+Result$
        IF k%=3 AND i% > 1
            Result$=chr$(46)+Result$
            K%=0
        END_IF
    NEXT i%
    Result$=Result$+"     0x"+Hexa32$
    j%=TEXT_WIDTH(Result$,34)
    LEFT 34, (885-j%)/2
    CAPTION 34, Result$
END_SUB
' ------------------------------------------------------------------------------
SUB Lines()
    2D_LINE 660,174,851,174
    2D_LINE 448,224,853,224
    2D_LINE 30,274,853,274
    2D_LINE 660,159,660,174
    2D_LINE 850,159,850,174
    DISPLAY
    2D_LINE 448,209,448,224
    2D_LINE 852,209,852,224
    2D_LINE 30,259,30,274
    2D_LINE 852,259,852,274
    DISPLAY
END_SUB
' ------------------------------------------------------------------------------
Reset:
    i% = NUMBER_CLICK
    SELECT i%
        CASE 41
            FOR Bit%=1 to 8
                ButtonState%(Bit%)=0
                CAPTION Bit%, 0
            NEXT Bit%
        CASE 42
            FOR Bit%=9 to 16
                ButtonState%(Bit%)=0
                CAPTION Bit%, 0
            NEXT Bit%
        CASE 43
            FOR Bit%=17 to 24
                ButtonState%(Bit%)=0
                CAPTION Bit%, 0
            NEXT Bit%
        CASE 44
            FOR Bit%=25 to 32
                ButtonState%(Bit%)=0
                CAPTION Bit%, 0
            NEXT Bit%
    END_SELECT
    Lines()    
    OctetDisplay()
    WordDisplay()
    DwordDisplay()
RETURN

EDIT du 28/11/2017 : Mise à jour du source, numérotation des bits de 0 à 31.


Dernière édition par Marc le Mar 28 Nov 2017 - 21:24, édité 2 fois
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Convertisseur pour nombres entiers signés Empty
MessageSujet: Re: Convertisseur pour nombres entiers signés   Convertisseur pour nombres entiers signés EmptyLun 27 Nov 2017 - 18:29

C'est très bien, ça !

Je chipote: tu numérotes des bits de 1 à 32. Pour la part, j'aurais choisi de les numéroter de 0 à 31. Chaque bit corrspond ainsi à son exposant pour a puissance de 2:
1 = 2^^0 = bit 0
2 = 2^^1 = bit 1
etc.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur pour nombres entiers signés Empty
MessageSujet: Re: Convertisseur pour nombres entiers signés   Convertisseur pour nombres entiers signés EmptyLun 27 Nov 2017 - 18:42

Informatiquement parlant, c'est vrai que c'est plus juste de mettre 0 à 31.

Mais pour compter, il est plus simple d'aller de 1 à 32...

Quelle formule choisir ?

Je suis prêt à modifier.

Quelqu'un d'autre ? D'autres avis ? ....
Revenir en haut Aller en bas
jean_debord

jean_debord


Nombre de messages : 1266
Age : 70
Localisation : Limoges
Date d'inscription : 21/09/2008

Convertisseur pour nombres entiers signés Empty
MessageSujet: Re: Convertisseur pour nombres entiers signés   Convertisseur pour nombres entiers signés EmptyMar 28 Nov 2017 - 9:27

Je partage l'avis de Klaus. 0 à 31 est plus conforme aux notations informatiques habituelles. On aura moins de bugs en comptant comme cela.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Convertisseur pour nombres entiers signés Empty
MessageSujet: Re: Convertisseur pour nombres entiers signés   Convertisseur pour nombres entiers signés EmptyMar 28 Nov 2017 - 21:29

Sur une remarque de Klaus :

=> Adoption de la numérotation logique des bits en commençant de 0 jusqu'à 31.

Premier post mis à jour.

Merci Klaus !

Merci à Jean et tous les lecteurs.
Revenir en haut Aller en bas
Contenu sponsorisé





Convertisseur pour nombres entiers signés Empty
MessageSujet: Re: Convertisseur pour nombres entiers signés   Convertisseur pour nombres entiers signés Empty

Revenir en haut Aller en bas
 
Convertisseur pour nombres entiers signés
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» ADDON pour grands nombres entiers
» nombres entiers et limitation
» DLL pour le calcul sur les grands entiers
» Les nombres narcissiques (ou nombres d’Armstrong)
» addition d'entiers avec des réels

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: