棧應用 實現二進位制轉八進位制 十進位制 十六進製制

2021-08-14 20:45:32 字數 4313 閱讀 7717

二進位制是計算機資料的儲存形式,它是由一串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二進位...