2016-09-23 154 views
0

我創建了一個方法來生成n位數字爲256位的隨機二進制數字。爲了繼續我的程序,我需要把我的二進制值的矢量,並將其放入一個十進制數組,然後將該數字轉換成十進制數字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,號碼是號碼,數字表示是數字表示?我更喜歡基地20順便說一句,有十個手指和十個腳趾。 –

+0

@ ClaytonTM9你似乎有一個主要的低音。 –

+1

@ ClaytonTM9 - 1)'int len = binary.size(); int a = binary [len];'這是無效的C++。數組必須使用常量作爲條目數來聲明。 2)'pow(2,len-i-1)' - 如果[exponent是一個整數],不要使用'pow'(http://stackoverflow.com/questions/25678481/why-does-pown- 2-return-24-when-n-5 -with-my-compiler-and-os) – PaulMcKenzie

回答

0

的代碼是不是所有的壞,但它確實有一些問題:

  • 如果只想非負值的int值只能容納32位在大多數平臺上,31位。因此,對於256位二進制數字,您將需要使用其他內容。

  • int a = binary[len]; //having trouble right here - 我認爲@PaulMcKenzie將此解釋爲嘗試聲明一個帶有可變數量元素的int數組(int a[len];)。我認爲它可能是初始化一個int變量到binary中的元素,最後一個條目後的一個。無論哪種方式都是錯誤的 - 但是你永遠不會使用a,我也沒有看到任何可能的用途。所以只要刪除那一行。

  • 不是一個錯誤,但你應該明白,int decimalValue不是十進制的,它是一個整數,它最有可能作爲一組位存儲在計算機內部,並且只有在轉換和顯示時才顯示爲十進制數以某種方式,如使用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'是標準庫中的一種數據類型,它將保存任意數量的位,並受到平臺功能的限制。 –

相關問題