1. 程式人生 > >進位制之間的轉換(1)——十進位制向二/八/十六進位制的轉換

進位制之間的轉換(1)——十進位制向二/八/十六進位制的轉換

1.十進位制轉換為十六/八進位制

#define _CRT_SECURE_NO_WARNINGS  //為解決scanf函式不安全的警告問題
#include<stdio.h>
#include<stdlib.h>

int main()
{
	int i;  //基本變數
	printf("請輸入所要進行進位制轉換的數:");
	scanf("%d", &i);
	printf("%x\n", i);  //%x表示輸出十六進位制的格式
                 /*printf("%o\n", i);  %o表示輸出八進位制的格式*/
	system("pause"); //暫停,否則VS執行視窗會一閃而過,包含在標頭檔案#include<stdlib.h>中
	return 0;
}

注:這是最最簡單的進位制之間轉換的方法,利用的是輸入/輸出的控制格式符。%x代表十六進位制;%o代表八進位制。

學習收穫:回顧了scanf,printf函式的用法,明白最簡單的進位制轉換方法,提高我以後在這方面的程式設計效率。加強我對VS熟練掌控。

反映的問題:對scanf,printf函式的格式細節做的不夠,對基礎知識的掌握浮於表面,不會靈活應用。註釋的的編寫太過隨性,程式設計   習慣不夠好。

2.十進位制轉換為二進位制(表現我們平時紙上運算過程)

#define _CRT_SECURE_NO_WARNINGS  //為解決scanf函式不安全的警告問題
#include<stdio.h>
#include<stdlib.h>

int main()
{
	int i, j, m, n;//基本變數
	int a[16] = { 0 };//陣列初始化
	printf("請輸入要進行進位制轉換的數的值:");
	scanf("%d", &m);
	//計算二進位制的迴圈
	for (i = 0; i < 15; i++) //因為僅限於整型的正數部分(最高位始終為0),因此的0~14的迴圈。
	{
		j = m % 2;  //求m的餘數
		n = m / 2;  //求商
		m = n;     //商值繼續向下除
		a[i] = j;  //餘數放在陣列中
	}
	//輸出二進位制的迴圈
	for (i = 15; i >= 0; i--)
	{
		printf("%d", a[i]);  //將餘數倒序輸出,符合我們計算規則。
		if (i % 4 == 0)    //將餘數四位四位的輸出,方便記錄,觀看。
			printf(" ");
	}
	system("pause");
	return 0;
}

注:這是體現我們平時對十進位制轉換為二進位制的計算過程(僅限於整型的正數部分)。利用的是for迴圈結構。

學習的收穫:加深的了對for迴圈的理解;學會了一個小技:利用空格字元使得執行結果更加方便檢視;對運算子%,/的運用更熟練。

發現的問題:陣列的初始化定義出錯:需要帶大括號。問題理解,找到解決思路不夠迅速,需要加強練習。同時這些程式碼都是單一轉換,像八/十六進位制很簡單,二進位制也只是計算的體現,以後還有更大進步空間。

執行結果:

周小琛