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
» Gestion d'un système client-serveur.
Convertisseur pour nombres entiers signés Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Convertisseur pour nombres entiers signés Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Convertisseur pour nombres entiers signés Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Convertisseur pour nombres entiers signés Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Convertisseur pour nombres entiers signés Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Convertisseur pour nombres entiers signés Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Convertisseur pour nombres entiers signés Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Convertisseur pour nombres entiers signés Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Convertisseur pour nombres entiers signés Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Convertisseur pour nombres entiers signés Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Convertisseur pour nombres entiers signés Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Convertisseur pour nombres entiers signés Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Convertisseur pour nombres entiers signés Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Convertisseur pour nombres entiers signés Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Convertisseur pour nombres entiers signés Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment :
ETB Pokémon Fable Nébuleuse : où ...
Voir le deal

 

 Convertisseur pour nombres entiers signés

Aller en bas 
3 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2397
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 : 12301
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 : 2397
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 : 1250
Age : 69
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 : 2397
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)
» Convertisseur Binaire

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: