/* Programme de calcul et d'affichage de la repartition en groupes de
* personnes, d'effectifs equilibres, valeurs lues au clavier */
#include
int main()
{
int groupes, personnes;
printf("groupes: ");
scanf("%d", &groupes);
printf("personnes: ");
scanf("%d", &personnes);
printf("Nombre de grands groupes : %d et leur effectif %d\n",
personnes % groupes, personnes / groupes);
printf("Nombre de petits groupes : %d et leur effectif %d\n",
groupes - personnes % groupes, 1 + personnes / groupes);
return 0;
}
2)
/* Programme de calcul et d'affichage du n-ieme bit d'une valeur entiere
* lue au clavier, ainsi que n (les bits sont numerotes de 0 a 31) */
#include
int main()
{
int valeur, bit, n;
printf("valeur: ");
scanf("%d", &valeur);
printf("numero du bit (0 a 31): ");
scanf("%d", &n);
/* Le decalage '>>' vers la droite de n bits permet de placer le bit
* recherche a la premiere position. Le masquage avec 1 permet de l'isoler.
*/
bit = (valeur >> n) & 1;
printf("valeur du %d-ieme bit = %d\n", n, bit);
return 0;
}
3)
/* Programme de calcul et d'affichage des 4 octets d'une valeur entiere,
* lue au clavier */
#include
int main()
{
int ivaleur, octet;
printf("valeur entiere: ");
scanf("%d", &ivaleur);
/* acces a un octet par masquage tout a 1 de l'octet */
octet = ivaleur & 0xFF;
printf("1er octet = 0x%2.2X\n", octet);
/* Decalage de 8 bits pour placer l'octet suivant dans l'octet de poids
* faible. "ivaleur >>= 8" est equiv. a "ivaleur = ivaleur >> 8" */
ivaleur >>=8;
octet = ivaleur & 0xFF;
printf("2eme octet = 0x%2.2X\n", octet);
ivaleur >>=8;
octet = ivaleur & 0xFF;
printf("3eme octet = 0x%2.2X\n", octet);
ivaleur >>=8;
octet = ivaleur & 0xFF;
printf("4eme octet = 0x%2.2X\n", octet);
return 0;
}
4)
/* Programme de calcul et d'affichage des 4 octets d'une valeur flottante,
* lue au clavier */
#include
int main()
{
/* Les operateurs de decalage sont des operateurs entiers, et non flottants.
* Pour faire cet exercice, deux solutions : utiliser une union qui permet
* de "voir" un meme espace memoire de plusieurs facons : */
union {
int ivaleur;
float fvaleur;
} u;
/* Une seconde solution est d'utiliser un changement de type lors de l'acces
* a la variable :
* int ivaleur;
* float fvaleur;
* printf("valeur flottante: ");
* scanf("%f", &fvaleur);
*
* ivaleur = *((int *) &fvaleur);
*/
int octet;
printf("valeur flottante: ");
scanf("%f", &u.fvaleur);
octet = u.ivaleur & 0xFF;
printf("1er octet = 0x%2.2X\n", octet);
u.ivaleur >>=8;
octet = u.ivaleur & 0xFF;
printf("2eme octet = 0x%2.2X\n", octet);
u.ivaleur >>=8;
octet = u.ivaleur & 0xFF;
printf("3eme octet = 0x%2.2X\n", octet);
u.ivaleur >>=8;
octet = u.ivaleur & 0xFF;
printf("4eme octet = 0x%2.2X\n", octet);
return 0;
}