簡體   English   中英

用 arrays 進行二進制十進制轉換

[英]Binary decimal conversion with arrays

你有一個簡單的想法,我們 go 如何在 C 中從二進制數到十進制數而不做任何除法(因為我可以有非常大的數字),也許只使用掩碼(&、|、<< 或 >>)。 我有一張這樣的桌子:

tab[20] = {1,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1};

我想要這個:

tab[6] = {5,9,6,2,5,3};

這是可以做到的嗎? 謝謝您的幫助

了解我們如何 go 從二進制數到十進制數(可以有非常大的數字)

對於每個二進制數字,將十進制目標按 2 縮放並添加數字。

偽代碼

some_integer_type tab2[] = {1,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,1};
some_integer_type tab10[big_enough];

zero fill tab10[]
for (each i element in tab2[] starting with index 0) {
  // scale tab10[] by 2 and add tab2[]
  carry = tab2[i]
  for (each j element in tab10[] starting with the last index) {
    sum = (tab10[j] << 1) | carry;
    if (sum >= 10) {
      sum -= 10;
      carry = 1;
    } else {
      carry = 0;
    }
    tab10[i] = sum;
  }
}
print tab10[]

要僅使用&, |, << or >>執行>=, -= 10 ,請創建輔助函數:分而治之

沒有除法,最高可達 64 位。 這是“大”。 bin-to-dec 是用sprintf()完成的。 然后可以將該數字字符串轉換為整數數組,例如您的tab[6]

char bittab[64] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0};
long num = 0, dupl = 1;
int i;
for (i = 0; i < sizeof bittab; i++) {
    num += dupl * bittab[i];
    dupl *= 2;
}
char decstring[30];
sprintf(decstring, "%ld\n", num);
for (i = 0; i < strlen(decstring); i++)
    printf("%d\n", decstring[i] - '0');

output 是:

3
2
7
6
7
-38

這可以寫入 dectab[] 數組,不包括 null 終止符字節。

(我使位升序以保持大小打開。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM