2017-09-16 10 views
0

이런 2 차원 BOOL 어레이어쨌든 2 차원 배열을 C++에서 정수로 부울 수 있습니까?

bool table[16][16] 

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ...16[0][] ->1 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 ...16[1][] ->2 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 ...16[2][] ->3 
    0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1 ...16[3][] ->5 
    0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 ...16[4][] ->9 
    ... 
    0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1 ...16[15][] ->41 

있는가 추측 I 순차 어드레스에 정렬되어 불리언 값 모두를 알고있다. 산술 함수를 사용하지 않고 일부 타입 캐스트 함수를 사용하여 이러한 배열을 int 값으로 변환 할 수 있습니까? 그것은 pow 함수를 사용하여 계산하는 것보다 더 자연스러운 방법 인 것 같습니다.

해결하기 위해 reinterpret_cast를 사용했지만 작동하지 않습니다.

+0

사운드 작업은 ['표준 : bitset'과는 다소처럼 ] (http://en.cppreference.com/w/cpp/utility/bitset). – user0042

+0

[bool 배열을 int32, unsigned int 및 double로 변환 할 수 있습니까?] (https://stackoverflow.com/questions/32410186/convert-bool-array-to-int32-unsigned-int-and-double) – wally

답변

1

C++는 저장 방법을 지정하지 않습니다. bool. 컴파일러는 개별 값을 바이트 또는 원하는 다른 유형으로 저장하도록 선택할 수 있으므로 bool 배열을 정수로 변환 할 필요가 없습니다.

std::bitset<16>의 배열을 대신 사용하여 좀 더 간결하게 표현할 수 있습니다. 또한 to_ulong 멤버 함수를 사용하여 비트의 정수 표현을 가져올 수도 있습니다.

pow 함수를 사용하여 계산하는 것보다 자연스러운 방법 인 것 같습니다. 이 방법은 당신을 위해 작동하지 않는 경우

, 당신은 아직도 power 기능, 비트 연산으로 작업을 수행 할 수 있습니다

int res = 0; 
for (int b = 0 ; b != 16 ; b++) { 
    if (table[row][b]) { 
     res |= (1 << b); 
    } 
} 
+0

감사합니다. 당신의 친절에. 나는 직접적인 방법을 찾기 위해 주변을 둘러 보았지만 C++에는 적합하지 않습니다. –