二進位制是計算機資料的儲存形式,它是由一串0和1組成,每個二進位制數轉換成相應的十進位制數方法為:(xn
xn-1
xn-2
...x3x
2x1)
2= x1
*2^0+x
2*^1+...x
n*2^(n-1)。
利用二進位制轉十進位制原理,從低位起將每3位二進位制轉為1位十進位制 然後進行替換即可。
利用二進位制轉十進位制原理,從低位起將每4二進位制位轉為1位十進位制然後進行替換即可,不過在16進製制中用 a、b、c、d、e、f 代替10、11、12、13、14、15。
如果對棧這種資料結構不熟悉的,可以先看棧的順序儲存及實現(二)、棧的順序儲存及實現(一)。
首先我們來看二進位制轉十進位制。利用棧先進後出的原理,將輸入的二進位制數壓入棧中,高位在最下面,低位在上面,然後進行彈棧,將彈出的數轉換為相應的十進位制 進行累加即可得到對應的十進位制。
區域性**:
//二進位制數棧
seqstack binarystack;
initstack(&binarystack);
while (1)
//壓棧
push(&binarystack, num);
} int i = 0;
int dec = 0;//十進位制數
while (!isemptystack(&binarystack))
同樣是先把二進位制數壓棧,然後 彈棧,不過 的是3位二進位制才轉為1位八進位制,這樣就要把轉出來的八進位制放到另一棧中,此時八進位制數的低位在棧底,高位在棧頂,再次利用棧的先進後出的原理進行彈棧,高位先彈出來,依次進行輸出 就得到相應的八進位制了。
區域性**:
seqstack binarystack;//二進位制數棧
seqstack octstack;//八進位制數棧
initstack(&binarystack);
initstack(&octstack);
while (1)
//壓棧
push(&binarystack, num);
} while (1)
pop(&binarystack, &num);
oct += (num - '0')*pow(2, i);
} //將八進位制數壓入到棧中
push(&octstack, oct + '0');
if (isemptystack(&binarystack))
}
和二進位制轉八進位制一模一樣,不過的是需要4位二進位制位轉1位十六進製制,其餘都是一樣。
區域性**:
seqstack binarystack;//二進位制數棧
seqstack hexstack;//十六進製制數棧
initstack(&binarystack);
initstack(&hexstack);
while (1)
//壓棧
push(&binarystack, num);
} while (1)
pop(&binarystack, &num);
oct += (num - '0')*pow(2, i);
} //將十六進製制數壓入到棧中
if (oct<10)
else
if (isemptystack(&binarystack))
}
#define _crt_secure_no_warnings
#include #include #define ok 1
#define error 0
#define true 1
#define false 0
#define stack_init_size 5
#define stack_increment 5
typedef int status;
typedef char eletype;
typedef struct seqstack
seqstack;
//初始化棧
status initstack(seqstack* stack)
return ok;
}//壓棧
status push(seqstack* stack, eletype e)
//壓棧之前檢測容量是否足夠
if (stack->top - stack->base == stack->stacksize)
stack->top = stack->base + stack->stacksize;
stack->stacksize += stack_increment;
} *stack->top = e;
stack->top++;
return ok;
}//彈棧
status pop(seqstack* stack, eletype *e)
//空棧
if (stack->top == stack->base)
*stack->top--;
*e = *stack->top;
return ok;}/*
判斷棧是否為空
*/int isemptystack(seqstack* stack)
if (stack->top == stack->base)
return false;}/*
銷毀棧*/
status destroystack(seqstack* stack)
//銷毀棧 是釋放棧在記憶體中占用的空間資源
if (!stack->base)
stack->top = stack->base = null;
stack->stacksize = 0;
return ok;
}//二進位制 轉 十進位制
void binarytodeci()
//壓棧
push(&binarystack, num);
} int i = 0;
int dec = 0;//十進位制數
while (!isemptystack(&binarystack))
printf("對應的十進位制:%d\n", dec);
destroystack(&binarystack);
}//二進位制 轉 八進位制
void binarytooct()
//壓棧
push(&binarystack, num);
} while (1)
pop(&binarystack, &num);
oct += (num - '0')*pow(2, i);
} //將八進位制數壓入到棧中
push(&octstack, oct + '0');
if (isemptystack(&binarystack))
}printf("對應的八進位制:");
while (!isemptystack(&octstack))
printf("\n");
destroystack(&binarystack);
destroystack(&octstack);
}//二進位制 轉 十六進製制
void binarytohex()
//壓棧
push(&binarystack, num);
} while (1)
pop(&binarystack, &num);
oct += (num - '0')*pow(2, i);
} //將十六進製制數壓入到棧中
if (oct<10)
else
if (isemptystack(&binarystack))
}printf("對應的十六進製制:");
while (!isemptystack(&hexstack))
printf("\n");
destroystack(&binarystack);
destroystack(&hexstack);
}//二進位制 轉 八進位制
八進位制轉二進位制
位 bit 一位二進位制數,又稱位元 位元組 byte 1b 8b 記憶體儲存的最小單元 字長 同一時間內,計算機能處理的二進位制位數 字長決定了計算機的運算精度,字長越長,計算機的運算精度就越高。因此,高效能的計算機,其字長較長,而效能較差的計算機,其字長相對要短一些。其次,字長決定了指令直接定址...
十進位制轉二進位制八進位制16進製制
主函式,同樣和c中的主函式類似 public static void main string args string hexchar 輸入 類似與c scanner scanner new scanner system.in 待轉換的數 類似與c 的輸入函式 scanf d num int num ...
十進位制,二進位制,八進位制
發現很多人不懂十進位制 二進位制 八進位制等相互轉化的原理。在此我簡單的寫一下 php中有decbin 用於十進位制轉化二進位制,原理是什麼?我舉例說明一下 33的二進位制是多少?首先你必須明白。二進位制是只出現0101這樣的,33的二進位制是什麼呢?33除以2等於16餘數1,得到的1即為33二進位...