J'essaye d'utiliser un champ de bits pour stocker une série de compteurs qui sont utilisés pour faire des triangles pour les graphiques, puisque j'ai seulement besoin des valeurs 0,1,2 pour certains d'entre eux et ne veux pas gaspiller de mémoire. Ce que le code doit faire est de commencer à partir de bf.vertIndex = 0 et ensuite de faire une boucle jusqu'à ce que bf.vertindex = 6 où il s'arrêtera de fonctionner. Cependant le programme aboutit à une boucle infinie et quand je l'ai imprimer la valeur de bf.vertIndex comme int il est toujours = 1. Suis-je autorisé à utiliser des champs de bits avec ces opérandes? et suis-je capable d'ajouter un nombre entier, tel que 2, à la valeur d'un champ de bit donné?Peut-on comparer les bifields, en utilisant <,>, =?
float vertexData[12];
triInfo bf;
count = 0;
bf.trinum = 0;
bf.addedx = 0;//tracks if the x cord needs to be offset = 1 or 0
bf.addedy = 0;//same as for the x cord
bf.vertIndex = 0;
//this loop should make a triangle
while (bf.vertIndex < 6){
//sets cordinates for a vertex
vertexData[bf.vertIndex] = 500 + width*(bf.addedx);
vertexData[bf.vertIndex] = 500 + height*(bf.addedy);
//keeps track of the number of vertices created and checks where if an
bf.vertIndex += 2;
if (bf.vertIndex = 2 && bf.trinum == 0){
bf.addedy = !bf.addedy;
}
if (bf.vertIndex = 4 && bf.trinum == 0){
bf.addedx = !bf.addedx;
}
cout << ((int)bf.vertIndex);
}
c'est la façon dont le champ de bits j'est disposé
struct triInfo
{
unsigned char trinum:1, addedx :1,addedy:1, vertIndex:5;
};
J'ai vu un tutoriel ici Youtube où le monsieur fait la vidéo a ajouté deux valeurs qui ont été stockées sous forme de caractères au point 10:15 dans la vidéo.
'bf.vertIndex = 2' et' bf.vertIndex = 4' ne sont pas des comparaisons. Votre compilateur aurait dû vous prévenir à ce sujet. – user2357112
Si ces compteurs sont utilisés uniquement pour * créer * des graphiques (comme ci-dessus le 'triInfo bf;' étant la variable locale unique, rejetée à la fin de la portée), vous économisez de la mémoire au mauvais endroit), en échange de mauvaises performances et d'un code plus important. Je me demande ce qui vous a fait penser que cela en vaut la peine. (Il serait beaucoup plus logique d'économiser de la mémoire sur les types de données, que vous gardez en main, et non pas en unités simples, mais en centaines/milliers/..., puis quelques octets de plus de code peuvent en valoir la peine. – Ped7g
Vous indiquez les valeurs 0, 1, 2 - votre code pour 'addedx' et' addedy' semble n'utiliser que 0 ou 1. De toute évidence, 'vertIndex' utilise une plus grande plage. Si vous essayez de stocker '2' dans' bf.trinum', vous débordez le champ large de 1 bit. Votre code ne montre pas cela, donc il ne peut pas être un problème et la mention de 2 peut être un faux-fuyant. Mais soyez prudent. Vous auriez besoin d'au moins 2 bits pour gérer 0, 1, 2. –