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;
}