일부 배경에 대해, 두 개의 노드가 벽 사이에 벽을 가져야 할지를 결정하기 위해 부울 토글을 사용하여 미로를 작성하기 위해 정수 패킷을 전달하는 시스템을 작성하려고합니다. 현재 내 미로 핸들입니다. 480 벽, 따라서 하나의 항목으로 패킷을 보내고 싶지 않아 오히려 정수 배열 (길이 8)로 나눠 그래서 나에게 보낼 480/8 개체를 제공합니다. 이것은 내가 현재 구축 한 것입니다bitwise integer concationation
는const int wallRows = mazeSize/8;
int temp = NULL;
int temp2 = NULL;
int current = NULL;
int concatCount = 0;
int* walls = new int[wallRows];
int wallIndex = 0;
for (int i = 0; i < mazeSize; i++) {
current = temp2;
//ensure my ints have only 8 bytes
if (concatCount >= 7) {
//allocate a full int to the array
walls[wallIndex] = temp;
//clear the int
temp = NULL;
//move to the next array pos
wallIndex++;
//restart the int count
concatCount = 0;
}
if (maze->allEdges[i]._iswall) {
//append a 1 to the int
temp = 0b1;
}
else {
//append a 0 to the int
temp = 0b0;
}
//increment the int count
current = (temp2 << 1) | temp;
concatCount++;
}
, 내 생각은 INT의 말에 결과를 이동, int로 시작 그것에게 부울 "_isWall"비트의 반환에 따라 INT를 통과했다. int가 용량에 도달하면 배열의 다음 int로 반복하고 미로의 벽에 배열이 채워질 때까지 다시 시작합니다.
편집 : 내가 묻는 부분에 선명도가 부족합니다. 비트 연산이 실제로 여러 비트를 같은 정수로 할당하지 못하는 것 같습니다. 어디서 잘못 되었습니까?
무엇이 질문입니까? – CinCout
모든 int가 8 바이트 길이는 아닙니다. 'uint64_t'는 8 바이트 길이가 될 수 있습니다 만,'CHAR_BIT == 8 ', 즉 바이트가 8 비트 길이 인 경우에만 가능합니다. 대부분 바이트는 8 비트이지만 32 비트 PC, raspberri 파이 또는 arduino 용으로 컴파일하면 int는 64 비트가되지 않습니다. – Lanting