Précédent   Forum du club des développeurs et IT Pro > Java > Général Java
Général Java Java SE, Java ME, APIs, Persistance, JDBC, Spring, XML. Avant de poster -> FAQ Java, Sources Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/11/2012, 04h44   #1
ToTo13
Modérateur
 
Avatar de ToTo13
 
Homme Guillaume
Ingénieur de Recherche
Inscription : janvier 2006
Messages : 4 788
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 34
Localisation : Etats-Unis

Informations professionnelles :
Activité : Ingénieur de Recherche
Secteur : Santé

Informations forums :
Inscription : janvier 2006
Messages : 4 788
Points : 7 023
Points : 7 023
Par défaut Traduction d'une macro C++ en java

Bonjour,

je souhaiterai traduire cette macro C++ en Java :
Code C++ :
1
2
3
4
5
6
 
#define compab_mask_inc(ptr,shift)
	{
	value |= ((unsigned int)(cntr - *ptr) & 0x80000000)>> (31-shift) ;
	ptr++ ;
	}

ptr est un pointeur vers une position dans un tableau de int.
shift est un entier.
cntr est un entier utilisé dans la fonction qui appelle la macro.

Est ce que ma traduction en java est juste ?
Code java :
1
2
3
4
5
6
7
 
void compab_mask_inc(int[] tab, int ptr, int shift, int cntr)
	{
 	int value |= ((cntr - tab[ptr]) & 0x80000000) >> (31-shift) ;
	}
...
ptr++ ;

En sachant que je fais le ptr++ dans la méthode appelante.


Question annexe : J'ai également ce morceau de code dont j'aimerai une précision :
Code C :
1
2
 
for (i=0 ; i < n ; i++)  ... sizeof(i)
Je l'ai programmé rapidement et ça retourne systématiquement 4 quelque soit la valeur de 'i'.
Quel est l'intérêt du développeur d'avoir utilisé une telle instruction qui renvoie une constante ?

Merci par avance
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS.
- Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
- ton poste tu dois marquer quand la bonne réponse tu as obtenu.
ToTo13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 08h38   #2
fmdao
Membre actif
 
Avatar de fmdao
 
Inscription : novembre 2010
Messages : 86
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 86
Points : 162
Points : 162
Votre fonction ne renvoit rien et value est une variable local.
fmdao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 08h51   #3
ToTo13
Modérateur
 
Avatar de ToTo13
 
Homme Guillaume
Ingénieur de Recherche
Inscription : janvier 2006
Messages : 4 788
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 34
Localisation : Etats-Unis

Informations professionnelles :
Activité : Ingénieur de Recherche
Secteur : Santé

Informations forums :
Inscription : janvier 2006
Messages : 4 788
Points : 7 023
Points : 7 023
Désolé, j'avais fait ça un peu trop vite.
Merci.

Code java :
1
2
3
4
5
6
7
 
int compab_mask_inc(int[] tab, int ptr, int shift, int cntr)
	{
 	return value |= ((cntr - tab[ptr]) & 0x80000000) >> (31-shift) ;
	}
...
ptr++ ;
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS.
- Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
- ton poste tu dois marquer quand la bonne réponse tu as obtenu.
ToTo13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 09h39   #4
wax78
Modérateur
 
Avatar de wax78
 
Homme Renaud Warnotte
Développeur informatique
Inscription : août 2006
Messages : 2 142
Détails du profil
Informations personnelles :
Nom : Homme Renaud Warnotte
Âge : 32
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2006
Messages : 2 142
Points : 4 099
Points : 4 099
Envoyer un message via MSN à wax78
Moi il y'a toujours un truc qui me chiffonne avec la variable value.

C'est censé être une variable globale ?

Sinon quel intérêt de faire un | ? (autant faire direct variable=laformule plutot que variable|=laformule).

Mis a part cela, le code est compilable en java la.

Citation:
Je l'ai programmé rapidement et ça retourne systématiquement 4 quelque soit la valeur de 'i'.
Quel est l'intérêt du développeur d'avoir utilisé une telle instruction qui renvoie une constante ?
j'imagine que si i est un integer, il utilise donc 4 byte en mémoire.

L'intérêt du sizeof(i) ?

Aucune idée, il faut demander a celui qui l'a codé :p
wax78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 09h51   #5
thelvin
Modérateur
 
Inscription : septembre 2004
Messages : 7 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 7 123
Points : 10 361
Points : 10 361
Envoyer un message via Skype™ à thelvin
Citation:
Envoyé par ToTo13 Voir le message
Question annexe : J'ai également ce morceau de code dont j'aimerai une précision :
Code C :
1
2
 
for (i=0 ; i < n ; i++)  ... sizeof(i)
Je l'ai programmé rapidement et ça retourne systématiquement 4 quelque soit la valeur de 'i'.
Quel est l'intérêt du développeur d'avoir utilisé une telle instruction qui renvoie une constante ?
En C, sizeof sur un int n'est pas une constante. Selon les machines et les OS, ça peut faire 64, 32 ou 16 bits.
En Java, oui, un int fait toujours 32 bits.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais.
Partagez vos connaissances, mais aussi comment s'en servir.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 09h54   #6
ToTo13
Modérateur
 
Avatar de ToTo13
 
Homme Guillaume
Ingénieur de Recherche
Inscription : janvier 2006
Messages : 4 788
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 34
Localisation : Etats-Unis

Informations professionnelles :
Activité : Ingénieur de Recherche
Secteur : Santé

Informations forums :
Inscription : janvier 2006
Messages : 4 788
Points : 7 023
Points : 7 023
Oui, on peut considérer qu'elle est globale, donc cela devient :
Code java :
1
2
3
4
5
6
7
 
void compab_mask_inc(int[] tab, int ptr, int shift, int cntr)
	{
 	value |= ((cntr - tab[ptr]) & 0x80000000) >> (31-shift) ;
	}
...
ptr++ ;

Disons que j'avais un doute sur l'utilisation de l'héxa et sur la compréhension générale de la macro (mes développements en C sont de plus en plus lointains).

Le sizeof semble être un réflexe en cas d'utilisation des templates, mais dans ce cas ça retourne une constante, donc l'auteur a été un peu maladroit :-)
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS.
- Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
- ton poste tu dois marquer quand la bonne réponse tu as obtenu.
ToTo13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h43.


 
 
 
 
Partenaires

Hébergement Web