2016-09-23 4 views
0

나는 최대 256 자리의 n 자릿수의 무작위 이진수를 생성하는 방법을 만들었습니다. 내 프로그램을 계속하려면 이진 값으로 벡터를 가져와 십진수 배열에 넣은 다음 해당 숫자를 십진수 int 십진수로 변환해야합니다. 다음은 무작위 바이너리 벡터를 생성하고 십진수로 변환하려는 시도입니다. 내 이진 벡터를 소수로 변환하는 데 문제가 있습니다.바이너리 벡터를 십진수 배열로 변환

int random_binary(int n, int m){ 

    vector<int> binary; 

    for(int i = 0; i < n; i++) 
    { 
     m = rand() % 2; 

     binary.push_back(m); 
    } 

    binary.push_back(1); 

    int j; 

    for(j = 0; j < binary.size(); j++) 
    { 
     cout << binary[j]; 
    } 
    cout <<"\n"; 


    int len = binary.size(); 
    int a = binary[len]; //having trouble right here 

    int decimalValue = 0; 

    for (int i = len-1; i>= 0; i--) 
    { 
     decimalValue = decimalValue + binary[i]*pow(2,len-i-1); 
    } 

    return decimalValue; 
} 

누군가가이 점을 이해하면 도움이 될 수 있으면 좋겠다.

+0

Errr 숫자는 숫자 , 숫자 표현은 숫자 표현입니까? 나는 10 개의 손가락과 10 개의 발가락을 가지고 있고, 20 BTW를 기본으로 선호한다. –

+0

@ ClaytonTM9 당신은 큰 hypo가 보인다. –

+1

@ ClaytonTM9-1)'int len ​​= binary.size(); int a = binary [len];'이것은 C++가 유효하지 않습니다. 배열은 항목의 수로 상수를 사용하여 선언해야합니다. 2)'pow (2, len-i-1)'- [지수가 정수가 될 경우]'pow'를 사용하지 마십시오 (http://stackoverflow.com/questions/25678481/why-does-pown- 2-return-24-when-n-5-with-my-compiler-and-os) – PaulMcKenzie

답변

0

코드는 모두 나쁜 것은 아니지만 몇 가지 문제 가지고있다 : 당신은 음이 아닌 값을 원하는 경우는 int 값은, 대부분의 플랫폼에서 31 비트를 32 비트를 저장할 수

  • 을 . 따라서 256 진수의 경우 다른 것을 사용해야 할 것입니다.

  • int a = binary[len]; //having trouble right here - @ PaulMcKenzie는 이것을 가변 개수의 요소 (int a[len];)가있는 int 배열로 선언하려는 시도라고 생각합니다. 아마도 binary에있는 요소에 대한 변수를 int으로 초기화하는 것으로 보입니다. 어쨌든 어느 쪽이든 잘못되었지만 어쨌든 a을 사용하지 않으며 가능한 용도가 없습니다. 그러니 그 줄을 지우십시오.

  • 버그가 아니지만 int decimalValue은 10 진수가 아니며 컴퓨터 내부에 비트 세트로 저장되어 변환되고 표시 될 때만 소수점으로 표시되는 정수입니다. 어떤 방법으로, std::cout을 사용하여 인쇄 할 때와 같습니다. 합 루프

  • std::pow 정수 값을 사용하지 않아야하지만, 다행히도 비트 좌 시프트 연산자 2의 정수 힘 얻을 수있다 :
    decimalValue = decimalValue + binary[i] * (1<<(len-i-1));

+0

당신이 지적한 첫 번째 글 머리표에 대해 많은 질문을드립니다. 음수 값없이 32보다 큰 값을 유지하려면 무엇을 사용해야합니까? – ClaytonTM9

+0

음 31 비트는 0에서 2,147,483,647까지의 숫자를 제공합니다. 가장 큰 부호없는 정수형은'unsigned long long'이며, 알고있는 모든 플랫폼에서 64 비트를 사용하므로 0에서 18,446,744,073,709,551,615로 나타납니다. 더 많은 비트의 경우 배열 또는 값 벡터를 사용하고 수학 함수를 직접 만들어야 할 수도 있습니다. 'std :: bitset'는 표준 라이브러리의 데이터 유형으로 원하는 모든 비트를 저장할 수 있으며 플랫폼의 기능에 따라 제한됩니다. –

관련 문제