Pb comprehension (int*) VC++ // TC++

Résolu
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 - 9 août 2004 à 14:25
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 11 août 2004 à 12:10
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 août 2004 à 19:32
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++
3
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
9 août 2004 à 14:30
tc++ 16bits, vc++ 32bits
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 août 2004 à 14:36
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++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 août 2004 à 14:39
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 août 2004 à 14:41
ah excuse, je n'avais pas vu la deref du pointeur au sujet du cast.

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

MisterMok
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 août 2004 à 19:14
int est 4 octets compile pour 32 bits.

ciao...
BruNews, Admin CS, MVP Visual C++
0
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 1
9 août 2004 à 19:23
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
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
11 août 2004 à 10:08
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 août 2004 à 12:02
byte = octet = 8 bits
Ne doit pas y avoir confusion.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
11 août 2004 à 12:10
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 ?
0
Rejoignez-nous