Utilisation des masques
Fermé
maniqk
-
29 juil. 2013 à 15:25
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 30 juil. 2013 à 21:44
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 30 juil. 2013 à 21:44
A voir également:
- Utilisation des masques
- Notice d'utilisation - Guide
- Utilisation chromecast - Guide
- Appels masqués - Guide
- Votre compte a été désactivé pour violation de nos conditions d’utilisation - Guide
- La ressource demandée est en cours d'utilisation ✓ - Forum Logiciels
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
29 juil. 2013 à 16:55
29 juil. 2013 à 16:55
Bonjour,
Ben, le compilateur t'indique ce qui ne lui plait pas (trop grand).
Utilise plutôt : b=a>>32;
C'est plus simple :-).
Cdlt,
Ben, le compilateur t'indique ce qui ne lui plait pas (trop grand).
Utilise plutôt : b=a>>32;
C'est plus simple :-).
Cdlt,
Bonjour fiddy et merci pour ta réponse.
Ok pour les 32 premiers bits, mais comment ça marche pour les autres "mots" ?
Puis en fait, quand je déclare a = 0x1111111 etc, il me dit que c'est too large, mais bon je peux rien y faire mon nombre est comme ça ! Pis je comprends pas trop vu que c'est pas (forcément) un int...
Et le b=a>>32 me redonne quand même "expression must have integral type"
Ok pour les 32 premiers bits, mais comment ça marche pour les autres "mots" ?
Puis en fait, quand je déclare a = 0x1111111 etc, il me dit que c'est too large, mais bon je peux rien y faire mon nombre est comme ça ! Pis je comprends pas trop vu que c'est pas (forcément) un int...
Et le b=a>>32 me redonne quand même "expression must have integral type"
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
29 juil. 2013 à 17:38
29 juil. 2013 à 17:38
D'ailleurs, attention tu mélanges le binaire et l'hexa...
b = a & 0x11111111111111111111111111111111[0] // Le [0] représente 96 fois le chiffre 0
Un caractère en hexa se code sur 4 bits. Donc, mets plutôt : b=a & 0xFFFFFFFF[0]; [0] = 24 fois le chiffre 0.
Donc attention à ta définition de a.
Ok pour les 32 premiers bits, mais comment ça marche pour les autres "mots" ?
Bah, faut jongler un peu. Pour récupérer :
les 32 bits de gauche b=a>>96 & 0xffffffff; /*le &0xff... est inutile ici, mais cela permet de voir le début d'une boucle ;-)*/
les 32 bits suivants : b=a>>64 & 0xffffffff;
etc...
b = a & 0x11111111111111111111111111111111[0] // Le [0] représente 96 fois le chiffre 0
Un caractère en hexa se code sur 4 bits. Donc, mets plutôt : b=a & 0xFFFFFFFF[0]; [0] = 24 fois le chiffre 0.
Donc attention à ta définition de a.
Ok pour les 32 premiers bits, mais comment ça marche pour les autres "mots" ?
Bah, faut jongler un peu. Pour récupérer :
les 32 bits de gauche b=a>>96 & 0xffffffff; /*le &0xff... est inutile ici, mais cela permet de voir le début d'une boucle ;-)*/
les 32 bits suivants : b=a>>64 & 0xffffffff;
etc...
Et bonjour !
Merci pour vos réponses, mais en fait ça marche pas (il me redonne les mêmes erreurs)... Je me demande si c'est par rapport au logiciel que j'utilise ou pas du tout mais bon.
Je profite du fait que vous soyez tous les deux dans la discussion (parce que vous avez l'air de participer très activement à ce forum ^^) pour demander autre chose.
En fait, l'objectif final de mon programme c'est d'inverser une matrice carrée de taille quelconque. J'ai programmé cette inversion, et maintenant j'aimerais que cette inversion soit passée en fonction.
Je ne sais pas si c'est clair... Actuellement je génère une matrice avec des nombres aléatoires dedans, puis je faisais mon traitement.
A partir de maintenant la matrice en entrée est donnée, ou générée via un autre programme. Et je voudrais faire en sorte que l'inverse de cette matrice soit effectuée via l'appel à une fonction du genre inverse(matrice,...);
Le problème, c'est que pour calculer mon inverse, j'utilise des sous-matrices. Et celles-ci sont déclarées en global dans mon programme, par soucis de mémoire disponible.
J'avais testé, en déclarant mes sous-matrices dans le main() ou dans une autre fonction, le traitement ne se fait plus à partir d'une certaine taille de matrice (parce que justement je n'avais pas assez de place en mémoire pour stocker mes sous-matrices).
En les déclarant en global, le compilateur (je crois) permettait de réserver suffisamment d'espace en mémoire pour les stocker.
Du coup, vu que ce n'est plus moi qui génère ma matrice, je ne connais pas la taille de la matrice à inverser. Avant je faisais des #define dim_matrice 10 par exemple, maintenant je ne connais pas cette valeur. Et donc, mes déclarations en global de mes sous-matrices ne passent plus vu que les tailles des sous-matrices sont inconnues.
Je me demandais en fait si je pouvais créer une fonction qui fait mon traitement tout en gardant mes variables globales. Je ne peux mettre mes déclarations dans ma fonction puisque sinon, à partir d'une certaine taille ça ne fonctionnera plus...
Voilou je crois que j'ai tout dit ^^
Merci d'avance,
maniqk
P.S : Si y faut, je peux aussi recréer une autre discussion mais là c'était juste que vous avez tous les deux répondu donc vous avez probablement reçu un mail pour ce post ^^
Merci pour vos réponses, mais en fait ça marche pas (il me redonne les mêmes erreurs)... Je me demande si c'est par rapport au logiciel que j'utilise ou pas du tout mais bon.
Je profite du fait que vous soyez tous les deux dans la discussion (parce que vous avez l'air de participer très activement à ce forum ^^) pour demander autre chose.
En fait, l'objectif final de mon programme c'est d'inverser une matrice carrée de taille quelconque. J'ai programmé cette inversion, et maintenant j'aimerais que cette inversion soit passée en fonction.
Je ne sais pas si c'est clair... Actuellement je génère une matrice avec des nombres aléatoires dedans, puis je faisais mon traitement.
A partir de maintenant la matrice en entrée est donnée, ou générée via un autre programme. Et je voudrais faire en sorte que l'inverse de cette matrice soit effectuée via l'appel à une fonction du genre inverse(matrice,...);
Le problème, c'est que pour calculer mon inverse, j'utilise des sous-matrices. Et celles-ci sont déclarées en global dans mon programme, par soucis de mémoire disponible.
J'avais testé, en déclarant mes sous-matrices dans le main() ou dans une autre fonction, le traitement ne se fait plus à partir d'une certaine taille de matrice (parce que justement je n'avais pas assez de place en mémoire pour stocker mes sous-matrices).
En les déclarant en global, le compilateur (je crois) permettait de réserver suffisamment d'espace en mémoire pour les stocker.
Du coup, vu que ce n'est plus moi qui génère ma matrice, je ne connais pas la taille de la matrice à inverser. Avant je faisais des #define dim_matrice 10 par exemple, maintenant je ne connais pas cette valeur. Et donc, mes déclarations en global de mes sous-matrices ne passent plus vu que les tailles des sous-matrices sont inconnues.
Je me demandais en fait si je pouvais créer une fonction qui fait mon traitement tout en gardant mes variables globales. Je ne peux mettre mes déclarations dans ma fonction puisque sinon, à partir d'une certaine taille ça ne fonctionnera plus...
Voilou je crois que j'ai tout dit ^^
Merci d'avance,
maniqk
P.S : Si y faut, je peux aussi recréer une autre discussion mais là c'était juste que vous avez tous les deux répondu donc vous avez probablement reçu un mail pour ce post ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
Modifié par juliencolin54 le 30/07/2013 à 20:41
Modifié par juliencolin54 le 30/07/2013 à 20:41
Ce serait que tu postes ton code, pour que l'on visualise mieux tes problèmes.
Aussi :
1 - Cela m'étonnerait que tu sois obligé d'utiliser des globales (à éviter), il doit avoir moyen d'arranger cela
2 - Ton programme peut quand même marcher avec des variables globales, pour cela tu dois gérer dynamiquement leurs tailles
Je te conseille de commencer par changer tes matrices statiques en dynamiques, comme dans cet exemple:
Software is like sex, it's better when it's free - Linus Torvald
Aussi :
1 - Cela m'étonnerait que tu sois obligé d'utiliser des globales (à éviter), il doit avoir moyen d'arranger cela
2 - Ton programme peut quand même marcher avec des variables globales, pour cela tu dois gérer dynamiquement leurs tailles
Je te conseille de commencer par changer tes matrices statiques en dynamiques, comme dans cet exemple:
// Statique int tab[2][2]; // Dynamique int tab**; tab = malloc(2 * sizeof(int *)); tab[0] = malloc(2 * sizeof(int)) tab[1] = malloc(2 * sizeof(int));
Software is like sex, it's better when it's free - Linus Torvald
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
29 juil. 2013 à 18:02
29 juil. 2013 à 18:02
Bonjour,
Pour automatiser cela dans une boucle et ne pas faire un décalage de 96 puis 64 puis ...
Tu peux t'inspirer de cela :
Ce que tu veux faire (en gros), c'est ce code mais à plus grand échelle. (x4)
Cdlt.
Pour automatiser cela dans une boucle et ne pas faire un décalage de 96 puis 64 puis ...
Tu peux t'inspirer de cela :
int main(void) { int nb = 0xDEADDEAD; int i; for (i = 0; i < sizeof(nb); i++, nb>>=8) printf("%x\n", nb & 0xFF); return (0); }
Ce que tu veux faire (en gros), c'est ce code mais à plus grand échelle. (x4)
Cdlt.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
30 juil. 2013 à 21:44
30 juil. 2013 à 21:44
Alors tout d'abord qu'appelles-tu inversion de matrice ? Un élément M tel que M'*M = I (matrice identité) ?
Il nous faudrait ton code. Et idéalement, ouvre un autre post :-).
Sinon, il faut éviter les variables globales (à cause de la zone bss/data). Si la taille de ta matrice est trop grande, passe par un pointeur pointant sur une zone allouée du heap (malloc/calloc).
Si tu connais pas la taille de la matrice, ça va être problématique... La fonction te retournant la matrice doit impérativement te retourner la taille.
Aucun moyen de deviner la taille d'un pointeur (sauf convention particulière, se termine par un 0, etc.). Mais ça c'est à toi de nous dire.
Cdlt,
Il nous faudrait ton code. Et idéalement, ouvre un autre post :-).
Sinon, il faut éviter les variables globales (à cause de la zone bss/data). Si la taille de ta matrice est trop grande, passe par un pointeur pointant sur une zone allouée du heap (malloc/calloc).
Si tu connais pas la taille de la matrice, ça va être problématique... La fonction te retournant la matrice doit impérativement te retourner la taille.
Aucun moyen de deviner la taille d'un pointeur (sauf convention particulière, se termine par un 0, etc.). Mais ça c'est à toi de nous dire.
Cdlt,