Créer un Quad avec deux Long

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Créer un Quad avec deux Long

Message par Guimauve »

Bonjour à tous,

Voilà j'essais de créer un entier de type quad avec deux entier de type long mais ça ne fonctionne pas et je ne comprend pas pourquoi.

Voici le code en question :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Fusion et Extraction des parties d'un Quad

Macro MakeQuad(HiLong, LoLong)
  
  (HiLong << 32 | LoLong)
  
EndMacro

Macro ExtractQuadHiLong(Quad)
  
  ((Quad >> 32) & $FFFFFFFF)
  
EndMacro

Macro ExtractQuadLoLong(Quad)
  
  (Quad & $FFFFFFFF)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Fusion et Extraction des parties d'un Long

Macro MakeLong(HiWord, LoWord)
  
  (HiWord << 16 | LoWord)
  
EndMacro

Macro ExtractLongHiWord(Long)
  
  ((Long >> 16) & $FFFF)
  
EndMacro

Macro ExtractLongLoWord(Long)
  
  (Long & $FFFF)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! ATTENTION - CODE D'ESSAI !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

HiWord.w = 12345
LoWord.w = 23456
HiLong.l = HiWord
LoLong.l = LoWord

Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Original value"
Debug ""
Debug HiWord
Debug LoWord
Debug ""
Debug HiLong
Debug LoLong

Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; MakeLong() Test"
Debug ""

NewLong.l = MakeLong(HiWord, LoWord)
Debug NewLong
Debug ExtractLongHiWord(NewLong)
Debug ExtractLongLoWord(NewLong)

Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; MakeQuad() Test"
Debug ""

NewQuad.q = MakeQuad(HiLong, LoLong)
Debug NewQuad
Debug ExtractQuadHiLong(NewQuad)
Debug ExtractQuadLoLong(NewQuad)

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Et voici ce que le débogeur affiche :
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Original value

12345
23456

12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeLong() Test

809065376
12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeQuad() Test

23456
0
23456
Comme on peut le voir le MakeLong() fonctionne mais pas le MakeQuad(). Si quelqu'un peut me dire pourquoi parce que là je ne vois pas comment corriger la situation.

Merci à l'avance.

[Edit] J'ai oublié de mentionner que je suis sous Linux Ubuntu 10.04 x64 avec PB x64.[/Edit]

A+
Guimauve
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Créer un Quad avec deux Long

Message par nico »

Fonctionne sur XP avec PB 4.41
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: Créer un Quad avec deux Long

Message par SPH »

PB4.50 beta 3 sous vista 32 :
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Original value

12345
23456

12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeLong() Test

809065376
12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeQuad() Test

53021371292576
12345
23456

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Créer un Quad avec deux Long

Message par G-Rom »

même os que toi , mis à part en x86
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Original value

12345
23456

12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeLong() Test

809065376
12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeQuad() Test

53021371292576
12345
23456
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Créer un Quad avec deux Long

Message par Guimauve »

Bon et bien c'est probablement un bogue dans la version x64.

Merci à tous pour votre aide.

A+
Guimauve
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Créer un Quad avec deux Long

Message par venom »

Seven x64 et purebasic 4.50 x64 :
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Original value

12345
23456

12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeLong() Test

809065376
12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeQuad() Test

23456
0
23456





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Créer un Quad avec deux Long

Message par Le Soldat Inconnu »

c'est juste une idée mais tes loLong et Hilong de ta macro sont défini en Quad en x64 car tu ne précise pas le type.

Alors essaie de préciser les types sur toutes tes variables
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Créer un Quad avec deux Long

Message par Backup »

Le Soldat Inconnu a écrit :Alors essaie de préciser les types sur toutes tes variables
je n'ai pas répondu, car des la première lecture, ça m'a sauté aux yeux :)

je me suis dis, "lorsqu'il sera réveille , il le verra tous seul.."
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Créer un Quad avec deux Long

Message par Guimauve »

Bonjour à tous

Voici un nouveau code qui montre bien le problème.

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Fusion et Extraction des parties d'un Quad

Procedure.q MakeQuad(HiLong.l, LoLong.l)
	
	ProcedureReturn (HiLong << 32 | LoLong)
	
EndProcedure

Procedure.l ExtractQuadHiLong(Quad.q)
	
ProcedureReturn ((Quad >> 32) & $FFFFFFFF)
	
EndProcedure

Procedure.l ExtractQuadLoLong(Quad.q)
	
	ProcedureReturn (Quad & $FFFFFFFF)
	
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Fusion et Extraction des parties d'un Long

Macro MakeLong(HiWord, LoWord)
	
	(HiWord << 16 | LoWord)
	
EndMacro

Macro ExtractLongHiWord(Long)
	
	((Long >> 16) & $FFFF)
	
EndMacro

Macro ExtractLongLoWord(Long)
	
	(Long & $FFFF)
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! ATTENTION - CODE D'ESSAI !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

HiWord.w = 12345
LoWord.w = 23456
HiLong.l = HiWord
LoLong.l = LoWord

Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Original value"
Debug ""
Debug HiWord
Debug LoWord
Debug ""
Debug HiLong
Debug LoLong

Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; MakeLong() Test"
Debug ""

NewLong.l = MakeLong(HiWord, LoWord)
Debug NewLong
Debug ExtractLongHiWord(NewLong)
Debug ExtractLongLoWord(NewLong)

Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; MakeQuad() Test"
Debug ""

NewQuad.q = MakeQuad(HiLong, LoLong)
Debug NewQuad
Debug ExtractQuadHiLong(NewQuad)
Debug ExtractQuadLoLong(NewQuad)

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
A+
Guimauve
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: Créer un Quad avec deux Long

Message par SPH »

Ton new code sous vista 32 et PB 4.50 beta 3 :
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Original value

12345
23456

12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeLong() Test

809065376
12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeQuad() Test

53021371292576
12345
23456

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Créer un Quad avec deux Long

Message par venom »

le resultat windows 7 x64 purebasic 4.50 x64:
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Original value

12345
23456

12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeLong() Test

809065376
12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeQuad() Test

23456
0
23456





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Créer un Quad avec deux Long

Message par Guimauve »

Bonjour à tous,

Voilà j'ai trouvé un moyen de contourner le le bogue. Voir le code suivant :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Fusion et Extraction des parties d'un Quad

Macro MakeQuad(HiLong, LoLong)
  
  ; (HiLong << 32 | LoLong) ; C'est l'opérateur "|" qui génère le bogue.
  ((HiLong << 32) + LoLong) ; De cette manière cela fonctionne correctement
  
EndMacro

Macro ExtractQuadHiLong(Quad)
	
	((Quad >> 32) & $FFFFFFFF)
	
EndMacro

Macro ExtractQuadLoLong(Quad)
	
	(Quad & $FFFFFFFF)
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Fusion et Extraction des parties d'un Long

Macro MakeLong(HiWord, LoWord)
	
	(HiWord << 16 | LoWord)
	
EndMacro

Macro ExtractLongHiWord(Long)
	
	((Long >> 16) & $FFFF)
	
EndMacro

Macro ExtractLongLoWord(Long)
	
	(Long & $FFFF)
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! ATTENTION - CODE D'ESSAI !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

HiWord.w = 12345
LoWord.w = 23456
HiLong.l = HiWord
LoLong.l = LoWord

Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Original value"
Debug ""
Debug HiWord
Debug LoWord
Debug ""
Debug HiLong
Debug LoLong

Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; MakeLong() Test"
Debug ""

NewLong.l = MakeLong(HiWord, LoWord)
Debug NewLong
Debug ExtractLongHiWord(NewLong)
Debug ExtractLongLoWord(NewLong)

Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; MakeQuad() Test"
Debug ""

NewQuad.q = MakeQuad(HiLong, LoLong)
Debug NewQuad
Debug ExtractQuadHiLong(NewQuad)
Debug ExtractQuadLoLong(NewQuad)

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Original value

12345
23456

12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeLong() Test

809065376
12345
23456

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; MakeQuad() Test

53021371292576
12345
23456
A+
Guimauve
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Créer un Quad avec deux Long

Message par venom »

:) oui ça fonctionne aussi chez moi.




@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre