Pb comprehension (int*) VC++ // TC++ [Résolu]

Signaler
Messages postés
132
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2012
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Salut ,

J'ai rencontré un truc marrant que je n'arrive pas a expliquer... voici le code :

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"

#define BYTE unsigned char
#define WORD unsigned int

int main()
{
BYTE tmp[2];
WORD *val;

tmp[0] = 1;
tmp[1] = 1;

val=(WORD*)&tmp[0];
printf("%.0f",(double)*val);

getch();
return 0;
}

Quand je compile avec TC++ (sous DOS) j'ai la valeur 257. Rien de bien étonnant me direz vous ....
Essayez avec VC++.... Apparament mon unsigned int est pointé sur 4 Bytes au lieu de 2.... et on à un resultat bizarre > 65535

Quelqu'un peut m'expliquer
Merci d'avance

MisterMok

11 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Au contraire, tout ce qui sera traite sur 32 bits sera le plus rapide.
Les acces 8 bits idem, par contre les acces 16 bits ont une penalite et ne sont donc pas parallelisables.

int et long en compilation 32 bits c'est IDEM.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
tc++ 16bits, vc++ 32bits
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
val=(WORD*) tmp;
n'irait pas mieux ? si c'est bien le but recherche qu'il pointe sur tmp.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
ah oui et ensuite c'est quoi ce cast '(double)*val', tu vas charger 8 octets en fpu a partir de cette adresse alors qu'il n'y en a que 2 d'initialises. Comprends pas le but du tout.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
ah excuse, je n'avais pas vu la deref du pointeur au sujet du cast.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
132
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2012
1
Je percois la différence, mais int ou WORD ca reste toujours du 16 bits (2 octets) non ?

MisterMok
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
int est 4 octets compile pour 32 bits.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
132
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2012
1
D'accord.!!!

mais c'est plutot debile on utilise 2 byte pour rien. Autant dire que y'a plus de int et qu'on travaille toujours en long....
Surtout quand on veut faire du transfert de donnée par voie serie, ca implique de coller 2 octets. Ca multiplie par 2 le nombre d'octets envoyés.....
Question un processeur c'est comme un µC y'a des fonction de type

mov.b
mov.w
mov.l

C'est pas plus long de travailler qu'avec des registres 32 bytes ???

Enfin bref, je n'ai pas le niveau pour critiquer
Je vais me contenter de ta réponse... Merci à vous Deux

MisterMok
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Moi j'ai une ptite question qui n'a rien a voir.
On parle souvent de bits et de bytes alors qua ca a rien a voir.
Dans le cas de votre de discussion ne devrais t'on pas parler de byte et non de bits ?

Shell
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
byte = octet = 8 bits
Ne doit pas y avoir confusion.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
DeAtHCrAsH > quand BruNews parle de
" tout ce qui sera traite sur 32 bits sera le plus rapide"
"Les acces 8 bits idem"
"les acces 16 bits ont une penalite" ...

tu te doute bien que c'est des bits et non des bytes ?