2015-01-09 2 views
0

부울 배열은 1에 대해 true이고 0에 대해 false입니다. 8은 거짓 거짓 거짓 true로 표시됩니다. 인덱스 3에서 6은 거짓, 참, 참일 것입니다. 또한 pow()를 사용하지 않고이 작업을 수행하려고합니다. 메서드는 정수로 10 진 표현을 반환합니다. 내가 지금까지 무엇을 가지고C++ 부울 배열로 표현 된 이진수의 정수로 10 진수 값을 반환하는 메서드

: 도움을

int Binary::binaryToInteger(bool *binaryArray, int size) 
{ 
    Something that will keep track of the index and something that will keep track of 
    the amount I need to multiply by added to a total and an if else that will take care 
    of true or false 

    return total; 
} 

감사합니다!

+0

가능한 중복 http://stackoverflow.com/questions/10949491/fast-way-to- 이진수 - 십진수 변환) – CoryKramer

+0

입력 배열에 숫자의 부호가 표시되어 있습니까? –

+0

@ MarkB : int의 부호는 가장 높은 비트에 있습니다. 따라서 배열 크기가'<= numeric_limits :: digits'이면 배열은 부호없는 숫자를 나타냅니다. 배열의 크기가'== numeric_limits :: digits + 1'이면 마지막 배열 요소는 부호를 지정합니다. 'numeric_limits :: digits'는 부호 비트를 계산하지 않습니다. –

답변

2

내가 두의 힘에 대한 pow()를 사용 pow()

를 사용하지 않고이 작업을 수행 할 것은 적어도 바이너리 하드웨어에 대한 과잉이다. 당신은 하나로 설정 될 것이다 bitNumber 제외하고 모든 비트를 0으로 설정하여,과 int을 생산하는

int mask = 1 << bitNumber; 

를 사용할 수 있습니다. 내가 곱셈에 대한 필요가 없습니다 총

에 추가로 증식하는 데 필요한 양을 추적합니다

뭔가.

res |= 1 << bitNumber; 

당신이 bool 값의 배열을 통해 이동하는 경우는, 처음에 제로로 res을 설정하고, binaryArray[bitNumber]이 설정되어 bitNumber 인덱스에 위의 작업을 적용 추가에 관해서는, 당신은 비트 "OR"로 교체 할 수 있습니다 true으로 설정하면 res의 최종 값은 bool 값으로 정의 된 int에 해당합니다.

+0

감사! 나는 약간의 "OR"가 무엇인지 살펴볼 것입니다. – Bapho

0
int mul = 1; 
int accum = ; 
for(int i = size - 1; i > 0; i++) { 
    accum+=mul*binaryArray[i]; 
    mul*=2; 
} 

그런 것. 이 같은

+0

@Bapho 그래, 나는 정말 빨리 썼다. – BWG

0

시도 뭔가 :

#include <limits> 
#include <stdexcept> 

int Binary::binaryToInteger(bool *binaryArray, int size) 
{ 
    if ((size < 0) || (size > (std::numeric_limits<int>::digits+1))) // +1 for sign bit, which digits ignores 
     throw std::runtime_error("invalid size!"); 

    // The boolean array has true for 1 and false for 0. 
    // 8 would be represented as "false false false true", where true is at index 3. 
    // 6 would be "false, true, true". 

    int result = 0; 
    for (int i = 0; i < size; ++i) 
    { 
     if (binaryArray[i]) 
      result |= (1 << i); 
    } 

    return result; 
} 
[진수 진수로 변환하는 빠른 방법] (의
관련 문제