C语言实现原码一位除

具体代码如下,直接运行即可。

#include <stdio.h>
int main()
{
	int i, a = 0, b = 0, c = 0, flag = 3; // flag相当于指针来指明Q的位置
	char x[6], y[6];
	int R[6], Q[6], yb[6], y1[6]; // yb是-y的补码,y1为绝对值y
	printf("请输入X(带一位符号位四位数值位的二进制数,如+1011):");
	scanf("%5s", x); 
	while ((c = getchar()) != '\n' && c != EOF); // 清除缓冲区中的剩余字符
	printf("请输入Y(带一位符号位四位数值位的二进制数,如-1101):");
	scanf("%5s", y); 
	// printf("X=%s\n",x);
	// printf("Y=%s\n",y);
	y1[0] = 0; // 绝对值y一定是正的,符号位为0
	for (i = 4; i >= 1; i--)
	{
		if (y[i] == '1')
		{ // 将字符型的y变成int型的绝对值y
			y1[i] = 1;
		}
		else
			y1[i] = 0;
	}
	// printf("y的绝对值y1:");
	// for (i = 0; i <= 4; i++)
	// {
	// 	printf("%d", y1[i]);
	// }
	// printf("\n");

	if (x[0] == '+')
	{
		a = 0;
		x[0] = '0'; // 符号位计算
	}
	else // 这里我怀疑是有点问题,先加个大括号先,出问题再删
	{	a = 1;
		x[0] = '1';
	}
	if (y[0] == '+')
	{
		b = 0;
		y[0] = '0';
	}
	else // 这里我怀疑是有点问题,先加个大括号先,出问题再删
	{	b = 1;
		y[0] = '1';
	}
	if (a + b == 1) //只有一个1一个0,异号的时候才结果为负
	{
		c = 1;
	}
	else
		c = 0; // c为符号位

	yb[0] = 1;
	for (i = 4; i >= 0; i--)
	{ //-y的补码计算
		if (y1[i] == 1) //!!!我这里把y改成了y1
			yb[i] = 0; // 取反
            //我这里不取反试试
            // yb[i] = 1;
		else
			yb[i] = 1;
            //我这里不取反试试
            // yb[i] =0;
	}
	// printf("y1取反后的值:");
	// for (i = 0; i <= 4; i++)
	// {
	// 	printf("%d", yb[i]);
	// }
	// printf("\n");

	yb[4] = yb[4] + 1; // 末尾加一
	for (i = 4; i > 0; i--)
	{
		if (yb[i] == 2)
		{ // 满2进一位
			yb[i] = 0;
			yb[i - 1] += 1;
		}
		if (yb[i] == 3)
		{ // 满3进一位 且留下1
			yb[i] = 1;
			yb[i - 1] += 1;
		}
	}

	// printf("-y1的补码yb为:");
	// for (i = 0; i <= 4; i++)
	// {
	// 	printf("%d", yb[i]);
	// }
	// printf("\n");

	for (i = 4; i >= 0; i--)
	{
		Q[i] = 0; // 给Q赋初值
	}

	R[0] = 0; // 设置余数
	for (i = 4; i >= 1; i--)
	{ // 给R做初始化
		if (x[i] == '1')
			R[i] = 1;
		else
			R[i] = 0;
	}

	// printf("R的初始值:"); // 余数符号位为0 数值位为x的值
	// for (i = 0; i <= 4; i++)
	// {
	// 	printf("%d", R[i]);
	// }
	// printf("\n");

	while (flag >= 1)
	{ // 当flag=1时相当于全部除完

		if (flag == 1)
		{ // 最后一步不移位  单独提出来
			for (i = 4; i >= 0; i--)
			{ // 余数R加上-y的补码
				R[i] += yb[i];
				if (R[i] == 2)
				{ // 满2进一位
					R[i] = 0;
					R[i - 1] += 1;
				}
				if (R[i] == 3)
				{ // 满3进一位 且留下1
					R[i] = 1;
					R[i - 1] += 1;
				}
			}
			if (R[0] == 1)
			{ // 若符号位为1 说明不够减 再加y恢复余数,不够减Q=0
				Q[4] = 0;
			}
			else
				Q[4] = 1;

			break;
		}
		for (i = 4; i >= 0; i--)
		{ // 余数R加上-y的补码
			R[i] += yb[i];
			if (R[i] == 2)
			{ // 满2进一位
				R[i] = 0;
				R[i - 1] += 1;
			}
			if (R[i] == 3)
			{ // 满3进一位 且留下1
				R[i] = 1;
				R[i - 1] += 1;
			}
		}

		if (R[0] == 1)
		{ // 若符号位为1 说明不够减 再加y恢复余数,不够减Q=0
			Q[4] = 0;
			flag -= 1; // 向左移动一位
			for (i = 4; i >= 1; i--)
			{
				R[i] += y1[i];
				if (R[i] == 2)
				{ // 满2进一位
					R[i] = 0;
					R[i - 1] += 1;
				}
				if (R[i] == 3)
				{ // 满3进一位 且留下1
					R[i] = 1;
					R[i - 1] += 1;
				}
			} // 不够减先恢复余数再左移
			for (i = 0; i <= 3; i++)
			{ // 左移
				R[i] = R[i + 1];
			}
            //!!! 这里应该是逻辑左移的,所以我重新设为0
			// R[4] = Q[0]; // 将Q的第一个移动给R
            R[4] = 0 ;
			for (i = 0; i <= 3; i++)
			{ // 左移
				Q[i] = Q[i + 1];
			}
		} // 恢复后R[0]符号位又变成了0

		else
		{			   // 够减直接左移
			Q[4] = 1;  // 够减Q为1
			flag -= 1; // 向左移动一位
			for (i = 0; i <= 3; i++)
			{ // 左移
				R[i] = R[i + 1];
			}
            //!!! 还是逻辑左移设为0
			// R[4] = Q[0]; // 将Q的第一个移动给R
            R[4] = 0;

			for (i = 0; i <= 3; i++)
			{ // 左移
				Q[i] = Q[i + 1];
			}
		}
	}
	printf("商Q的值:");
	for (i = 0; i <= 4; i++)
	{
		printf("%d", Q[i]);
	}
	printf("\n");

	printf("余数R的值:0.000");
	for (i = 0; i <= 4; i++)
	{
		printf("%d", R[i]);
	}
	printf("\n");

	printf("X/Y=%d.", c);
	for (i = 1; i <= 4; i++)
	{
		printf("%d", Q[i]);
	}
	printf("\n");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值