그래픽을위한 삼각형을 만드는 데 사용되는 일련의 카운터를 저장하기 위해 비트 필드를 사용하려고합니다. 일부는 값 0,1,2 만 필요하기 때문에 메모리를 낭비하고 싶지는 않습니다. 코드가 수행해야하는 작업은 bf.vertIndex = 0부터 시작하여 bf.vertindex = 6까지 반복되어 실행을 멈 춥니 다. 그러나 무한 루프에서 프로그램 결과 및 bf.vertIndex 값을 인쇄 할 때 항상 = 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 분 동영상.
'bf.vertIndex = 2'와'bf.vertIndex = 4'는 비교가 아닙니다. 컴파일러에서 경고해야합니다. – user2357112
그 카운터가 (* 스코어의 끝에서 버려지는 단일 로컬 변수 인'triInfo bf;와 같이) * 그래픽을 만들 때만 사용된다면, 메모리를 잘못된 장소에 저장하게 될 것입니다.), 열악한 성능과 더 큰 코드와 교환하십시오. 이것이 가치 있다고 생각하게 만든 이유가 궁금합니다. (데이터 유형에 대한 메모리를 저장하는 것이 훨씬 더 중요합니다. 단 하나의 단위가 아니라 수백/수천/개가 넘는 데이터 유형에 메모리를 저장하면 몇 바이트의 코드가 더 가치가있을 수 있습니다. . 여전히 병목 현상을 찾아내는 성능도 있습니다.) – Ped7g
0, 1, 2 값을 언급합니다. addx와 addy에 대한 코드는 0이나 1만을 사용하는 것처럼 보입니다. 분명히, vertIndex는 더 큰 범위를 사용합니다. 'bf.trinum'에'2'를 저장하려고하면, 1 비트 폭 필드가 오버플로됩니다. 코드에 표시되지 않으므로 문제가되지 않을 수 있으며 2의 언급은 빨간색 청어 일 수 있습니다. 하지만 신중해야합니다. 0, 1, 2를 처리하려면 최소한 2 비트가 필요합니다. –