可以使用<,>,=来比较bifields吗?

时间:2017-10-02 00:51:16

标签: c++ c bit-fields

我正在尝试使用位字段来存储一系列用于制作图形三角形的计数器,因为我只需要其中一些值为0,1,2并且不想浪费内存。代码应该做的是从bf.vertIndex = 0开始,然后循环直到bf.vertindex = 6,它将停止运行。然而,程序导致无限循环,当我将bf.vertIndex的值打印为int时,它总是= 1.我是否允许使用这些操作数的位字段?我能够在给定位域的值中添加一个整数,例如2吗?

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);

}

这就是我使用的位字段的布局方式

struct triInfo
{
    unsigned char trinum:1, addedx :1,addedy:1, vertIndex:5;

};

我在这里看到了一个教程Youtube,其中制作视频的绅士将两个值加在一起,在视频中的点10:15存储为字符。

1 个答案:

答案 0 :(得分:1)

您可以将位字段与<> == 进行比较,就像任何其他整数一样。但是=是一项任务,而非比较,而且您无意中覆盖了您要比较的值。

如果您正在使用clang或GCC,您应养成使用-Wall进行编译以启用编译器警告,然后仔细阅读警告以便能够解决根本原因的习惯。 (其他编译器具有类似的机制;请参阅手册。)