exercices "op

Le
orthognito
Bonjour à tous,

Je m'initie au C avec « Le langage C, Norme ANSI - 2e édition Â=
» de
Kernighan & Ritchie. Si quelqu'un se sent d'humeur didactique,
j'apprécierais ses critiques/remarques/suggestions concernant les
exercices 2-{6..8}. Je n'ai pas acheté les exercices corrigés et c=
es
machins binaires c'est assez nouveau pour moi :)

Si ce message contrevient aux us et coutumes du lieu, je suppose que
vous me le ferez savoir et je m'en excuse par avance ;)

#include <stdio.h>

/*
* Exercice 2-6 :
* Écrivez une fonction "fixer_bits (x, p, n, y)" qui retourne la
* valeur obtenue en remplaçant les n bits de x commençant à =
la po-
* sition p par les n bits de droite de y, sans toucher aux autres.
*/
unsigned int fixer_bits (unsigned int x, unsigned char p, unsigned
char n,
unsigned int y);

/*
* Exercice 2-7 :
* Écrivez une fonction "inverser (x, p, n)" qui retourne la valeur
* obtenue en inversant les n bits de x commençant à la position =
p
* (c.‐à‐d. en mettant les 1 à 0 et viceâ€=
versa), sans toucher aux
* autres.
*/
unsigned int inverser (unsigned int x, unsigned char p, unsigned char
n);

/*
* Exercice 2-8 :
* Écrivez une fonction "rotdroite (x, n)" qui retourne la valeur
* obtenue en faisant subir à x une rotation de n bits vers la
* droite.
*/
unsigned int rotdroite (unsigned int x, unsigned char n);

int main (void);

unsigned int
fixer_bits (unsigned int x, unsigned char p, unsigned char n, unsigned
int y)
{
unsigned int mask = ~0 << p + 1 | ~(~0 << p + 1 - n);
unsigned int framed_y = (y & ~(~0 << n)) << p + 1 - n;

return (x & mask | framed_y);
}

unsigned int
inverser (unsigned int x, unsigned char p, unsigned char n)
{
unsigned int mask = ~0 << p + 1 | ~(~0 << p + 1 - n);
return (x & mask | ~x & ~mask);
}

unsigned int
rotdroite (unsigned int x, unsigned char n)
{
unsigned int i = x | ~x;
unsigned char wl = 0;

for (; i > 0; i = i >> 1)
++wl;

n = n % wl;
unsigned int right = x >> n;
unsigned int left = (x & ~((x | ~x) << n)) << (wl - n);

return (left | right);
}

int
main ()
{
printf ("%o", fixer_bits (0765, 5, 3, 0123));
printf ("%o", inverser (0765, 5, 3));
printf ("%o", rotdroite (0765, 3));
return (0);
}
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
orthognito
Le #1855887
On Mar 17, 11:18 pm, wrote:
Si quelqu'un se sent d'humeur didactique,
j'apprécierais ses critiques/remarques/suggestions concernant les
exercices 2-{6..8}.


Me suis fendu d'une session google ->
« Answers to Exercices » maintained by R. Heathfield :
http://users.powernet.co.uk/eton/kandr2/index.html

... ça fera l'affaire.

Publicité
Poster une réponse
Anonyme