[英]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.