運算器的模擬和編程實現-計算機組成原理

在這裏插入圖片描述

一、從鍵盤輸入一個帶符號的十進制定點整數( -127 ~+127之間) 二、從屏幕上分別顯示其原碼、補碼、移碼形式( 8位帶符號二進制形式) 三、 從鍵盤輸入兩個帶符號十進制定點整數X和Y ( -127 ~+127之間) ,屏幕上輸出[X]原和[Y]和[X*Y]原。編程

在這裏插入圖片描述

代碼

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/************************************************************************/
/* 運用一種編程語言以下功能: 一、從鍵盤輸入一個帶符號的十進制定點整數( -127 ~+127之間) 二、從屏幕上分別顯示其原碼、補碼、移碼形式( 8位帶符號二進制形式) 三、 從鍵盤輸入兩個帶符號十進制定點整數X和Y ( -127 ~+127之間) ,屏幕上輸出[X]原和[Y]和[X*Y]原。 ************************************************************************/
void toYuanma(int, char * );
void toBuma(char*, char*);
void toYima(char*, char *);

int main(int argc, char *argv[]) {
again:
	printf("請輸入一個帶符號的十進制定點整數( -127 ~+127之間):");
	int num;
	scanf("%d", &num);

	if (num > 127 || num < -127)
	{
		printf("輸入無效\n\n");
		goto again;
	}

	//顯示原碼
	char yuanma[9] = {0};
	toYuanma(num, yuanma);
	printf("%d原碼爲:%s\n",num,yuanma);
	
	//顯示補碼
	char buma[9] = { 0 };
	toBuma(yuanma, buma);
	printf("%d補碼爲:%s\n", num, buma);

	//顯示移碼
	char yima[9] = { 0 };
	toYima( buma, yima);
	printf("%d移碼爲:%s\n", num, yima);

	printf("\n");

	// 從鍵盤輸入兩個帶符號十進制定點整數X和Y(-127 ~+ 127之間), 屏幕上輸出[X]原和[Y]和[X*Y]原。
again2:
	printf("輸入兩個帶符號十進制定點整數X和Y(-127 ~+ 127之間):");
	int x, y;
	int z;
	scanf("%d %d", &x, &y);
	z = x * y;
	if (z > 127 || z < -127)
	{
		printf("輸入無效\n\n");
		goto again2;
	}
	
	char xyuan[9] = { 0 };//[X]原
	char yyuan[9] = { 0 };//[Y]
	char xyyuan[9] = { 0 };//[X*Y]原
	toYuanma(x, xyuan);
	toYuanma(y, yyuan);
	toYuanma(z, xyyuan);
	printf("[X]原=%s\n[Y]原=%s\n[X*Y]原=%s\n",xyuan,yyuan,xyyuan);

	printf("\n");
	system("pause");
	return 0;
}

/************************************************************************/
/* 整數轉換爲原碼 ( 8位帶符號二進制形式) */
/************************************************************************/
void toYuanma(int num,char * yuanma /*in*/) {
	int pos = 0;
	int yu[8] = {0};
	strcpy(yuanma,"00000000"); //初始化

	(num >= 0) ? yuanma[0] = '0': (yuanma[0] = '1' , num = -num );//解決符號問題

	do
	{
		yu[pos++] = num % 2;
		num = num / 2;
	}
	while (num > 0);
	for (int i = 0; i < pos; i++)
	{
		yuanma[7 - i] = yu[i] + '0';
	}
}

/************************************************************************/
/* 整數原碼轉換爲補碼 ( 8位帶符號二進制形式) */
/************************************************************************/
void toBuma(char*yuanma, char*buma) {
	if (yuanma[0] == '0')
	{
		strcpy(buma, yuanma);
		return;
	}
	else
		strcpy(buma, "1???????");

	// 是負數,按位取反
	for (int i = 1;i<8;++i)
	{
		(yuanma[i] == '0') ? buma[i] = '1' : buma[i] = '0';
	}
	//+1

		int a = 7;
		while (buma[a] == '1')
		{
			buma[a--] = '0';
		}
		buma[a] = '1';
}

/************************************************************************/
/* 整數原碼轉換爲補碼 ( 8位帶符號二進制形式) */
/************************************************************************/
void toYima(char*buma, char*yima) {
	strcpy(yima, buma);
	(buma[0] == '0') ? yima[0] = '1' : yima[0] = '0';
}
複製代碼

實驗結果

image.png

image.png

相關文章
相關標籤/搜索