Je traverse le livre de la programmation de la programmation K & R C et je suis coincé sur l'exercice 2-6 qui se lit comme suit: P>
Écrire une fonction Setbits (x, P, N, Y) qui retourne X avec les n bits qui commencent à la position P set sur les n bits les plus à droite de y, laissant les autres bits inchangés. p> blockQuote>
J'ai du mal à comprendre la chose exacte qu'ils me cherchent à faire. J'ai regardé une réponse possible ici , mais je ne suis toujours pas vraiment comprendre. Je pense que c'est le libellé qui me jette. Quelqu'un peut-il peut-être expliquer ce qu'ils me cherchent de faire de manière différente? J'espère que différents libellés m'aideront à comprendre ce que je dois faire du code sage. P>
6 Réponses :
Par exemple:
int i = setbits(0xAB = b10101011, 5, 3, 0xAA = b10101010); i equals 0x93 = b10010011
L'idée est que y em> serait généralement moins que les bits n em>, mais au cas où ce n'est pas, utilisez uniquement n em>. En anglais, la tâche consiste à insérer y em> dans x em> à partir de p em>, en utilisant une largeur de champ de n em>. p>
Remplacez n bits de x, à partir de la position P, avec les n bits les plus à droite de y. p>
Et vous devez probablement profiter de la routine getbits () code> au chapitre 2.9 p>
Cette "réponse possible" n'est que du code sans commentaires. Pas étonnant que cela ne vous ait pas aidé. P>
La question (et probablement les intervenants) supposent que vous connaissez des champs de bits. Ce type de chose est très courant dans la programmation intégrée dans laquelle vous contrôlez des registres matériels. p>
Disons qu'il y a un registre qui définit le niveau de volume audio, entre autres choses. Cela pourrait, en même temps, vous permet de sélectionner des haut-parleurs ou des microphones et des choses comme ça. Les bits pourraient ressembler à ceci: p>
SSAAAMXX - Chaque lettre représente un Bitfield em> dans ce numéro. Pour modifier le volume, vous devez modifier la valeur de "AAA". Maintenant, disons que vous avez quelque chose dans votre programme qui vous permet d'ajuster le volume. C'est un simple contrôle, et il renvoie toujours un nombre compris entre 0 et 7. Le format pour cela ressemble à ceci: P>
xxxxxaaa - votre travail est alors de prendre les bits AAA à partir de ceci (appelez-le "y"), et définissez-les dans ce numéro ci-dessus (appelez-le "x"), sans altérer les bits qui ne sont pas la Comme. Ainsi, le problème lirait: "Prenez les 3 bits les plus à droite de Y et les mettre en x, en commençant par le bit 5 (rappelez-vous, ils comptent des bits de zéro). Ensuite, 3 et 5 dans notre exemple deviennent n et p dans le Problème d'origine. P>
Expliquer sur la réponse d'AVI:
Position #: 7 6 5 4 3 2 1 0 Bit: 1 0 1 0 1 0 1 0
C'est une très belle explication approfondie. Merci beaucoup.
Très bonne réponse. Il est également très utile d'obtenir une entrée d'échantillon et une réponse correcte pour vérifier si elle fonctionne ou non
Très très bonne explication en effet. La dernière ligne est la réponse? Je ne suis pas sûr de ce que vous transmettez mais la réponse devrait être: 10010011 code>
Que diriez-vous de cela?