C++学习记录:将十进制数转换为二进制数(补码形式)

2021-3-3
C++学习记录:将十进制数转换为二进制数(补码形式)
0、以下操作前提:不动符号位
基本运算:
1、正数的补码 等于 原码;
2、负数的补码 等于 原码取反,末位再加一;
推论:
3、补码的补码 等于 原码;
4、反码的反码 等于 原码;
5、补码减一 等于 反码。
·
·

//源码
#include <iostream>
using namespace std;
#define BIT 16

void transform(int binary[],int num)//简单将十进制转换为二进制
{
	for (int i = BIT - 1; i > 0; i--)
	{
		binary[i] = num % 2;
		num /= 2;
		if (num == 0)
		{
			break;
		}
	}
}

void logicNot(int binary[])//逻辑取反
{
	for (int i = BIT - 1; i > 0; i--)
	{
		if (binary[i] == 1)
		{
			binary[i] = 0;
		}
		else
		{
			binary[i] = 1;
		}
	}
}

void addOne(int binary[])//末位加一
{
	for (int i = BIT - 1; i > 0; i--)
	{
		if (binary[i] == 1)
		{
			binary[i] = 0;
		}
		else
		{
			binary[i] = 1;
			break;
		}
	}
}

int main() {
	int num;
	cin >> num;

	int binary[BIT] = {0};
	if (num >= 0)//判断num是否为正数,如果是,则直接转换;
	{			//否则需要进行相应操作,因为正数和负数的取余操作有点不一样。
		transform(binary, num);
	}
	else
	{
		binary[0] = 1;
		transform(binary, -num);
		logicNot(binary);
		addOne(binary);
	}

	for (int i = 0; i < BIT; i++)//输出
	{
		cout << binary[i];
		if ((i+1) % 4 == 0)
		{
			cout << " ";
		}
	}
	cout << endl;
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页