[C] Portabilité opérations bas niveau

Portabilité opérations bas niveau [C] - Programmation

Marsh Posté le 03-11-2001 à 00:53:31    

J'aimerait comprendre pourquoi les opérations bas niveau(& | ^ << >> champs de bits) de manipulation de bits sont dites peu, voir pas portables d'1 machine à 1 autre ou d'1 compilo à 1 autre.
Alors que l'API WIN32 les utilisent allègrement(LPARAM, WPARAM, LOWORD(l) ...)
Je souhaiterais les utiliser pour concaténer 2 infos (1 bit d'état + 1 mot de 31 bits) dans entier unsigned int en retour d'une fonction.
 
Merci

Reply

Marsh Posté le 03-11-2001 à 00:53:31   

Reply

Marsh Posté le 03-11-2001 à 11:32:09    

En fait ça dépend essentiellement du processeur de la machine sur lequel tourne ton programme. Suivant comment il va traiter les entiers tu va pas obtenir la même chose, mais ce comportement doit être relativemet standard sur les machines de type PC.

Reply

Marsh Posté le 03-11-2001 à 11:55:40    

ca depend d'une histoire de petit indien et de grand indien.
apres, je peux pas t'en dire plus , j'ai joyeusement fait cracké ce cours , mais si tu fat une recherche tu dois trouver
je crois que ca indique la position du bit depoids fort


---------------

Reply

Marsh Posté le 03-11-2001 à 14:12:03    

flo850 a écrit a écrit :

ca depend d'une histoire de petit indien et de grand indien.
apres, je peux pas t'en dire plus , j'ai joyeusement fait cracké ce cours , mais si tu fat une recherche tu dois trouver
je crois que ca indique la position du bit depoids fort  




c pas indien c'est endian :) c pas pareil
 
ça indique la position de l'octet de poid fort dans 1 mot
les pc sont little-endian : l'octet de poid faible est au début
par exemple 0xFFEE s'écrit 0xEEFF
 
La pluspart des autres proc sont big-endian (motorola 68k) et certains peuvent fonctionner dans les 2 modes (powerpc)

Reply

Marsh Posté le 03-11-2001 à 14:15:49    

Pschitt a écrit a écrit :

J'aimerait comprendre pourquoi les opérations bas niveau(& | ^ << >> champs de bits) de manipulation de bits sont dites peu, voir pas portables d'1 machine à 1 autre ou d'1 compilo à 1 autre.
Alors que l'API WIN32 les utilisent allègrement(LPARAM, WPARAM, LOWORD(l) ...)
Je souhaiterais les utiliser pour concaténer 2 infos (1 bit d'état + 1 mot de 31 bits) dans entier unsigned int en retour d'une fonction.
 
Merci  




 
En plus des problèmes d'endian il y a aussi des différences
entre les types c suivant l'architecture :
sur i386, un int fait 32 bits  
sur alpha ou ultrasparc l'int fait 64 bits

Reply

Marsh Posté le 03-11-2001 à 15:21:04    

Y'a apparemment 1 possibilité de vérifier la taille des divers types entiers avec la lib. limits.h :
 
http://groups.google.fr/groups?hl= [...] omp.lang.c
 
Et oui je vous aient mis en concurrence :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed