C/C++实现十进制转二进制运算
我最近无聊写了一个C++小程序,实现十进制转二进制的计算方法,使用字节形式输出结果。
下面贴代码:
#include <iostream>
#include <ctime>
using namespace std;
/**
* 由于本程序可以计算负数的二进制
* 所以使用字节的形式展现结果(八位)
*/
void count(int *num);
int main()
{
int input;
while(1)
{
cout << endl;
cout << "请输入一个十进制数:";
cin >> input;
/**
* 数值超出范围,结束
* 二进制第一位为符号位,0表正数,1表负数
* 所以最大值为01111111(十进制127),最小值为10000001(十进制-128)
*/
if(input > 127 || input < -128)return 0;
count(&input);
/*system("pause");
system("cls");*/
}
return 0;
}
void count(int *num)
{
int n = 2; //短除法除数
int array[8]; //用于存放二进制数
int i = 0; //有效数组长度变量
bool isZF = false; //正负数(true为正,false为负)
if(*num == 0)
{
return;
}
/* 循环短除取余数 */
while(*num != 0)
{
if(*num > 0)
{
isZF = true;
array[i] = *num % n;
*num /= 2;
i ++;
}
if(*num < 0)
{
isZF = false;
array[i] = (*num * (-1)) % n;
*num /= 2;
i ++;
}
}
cout << endl;
/**
* 变量i为数组有效长度(即为正数二进制的位数)
* 使用字节形式输出结果,所以补满八位
*/
int length = 8;
//若数组有效长度小于8
if(i < length)
{
int save[7];
//将余数倒一下,存放到数组
for(int k = i - 1, h = 0; k >= 0; k --, h ++)
{
//将有效值保存至另一个数组
save[h] = array[k];
}
//不足八位,前面补零
for(int x = 0; x < length - i; x ++)
{
array[x] = 0;
}
//计算得到有效值位数,赋予数组后面
for(int z = length - i, m = 0; z < length; z ++, m ++)
{
array[z] = save[m];
}
}
//cout << i << endl;
/*int length = sizeof(array) / sizeof(int);
for(int x = 0; x < length; x ++)
cout << x << endl;*/
cout << "二进制转换结果为:";
if(isZF) //为正数
{
/* 输出余数得出结果 */
for(int j = 0; j < length; j ++)
{
cout << array[j];
}
}
else //为负数
{
for(int n = 0; n < length; n ++)
{
//反码运算
if(array[n] == 0)
array[n] = 1;
else if(array[n] == 1)
array[n] = 0;
}
/* 输出余数数组得出结果 */
for(int j = 0; j < length; j ++)
{
//补码(+1)
if(j == 7)
array[j] += 1;
cout << array[j];
}
}
cout << endl;
cout << endl;
}
关于正数的计算方法请移步:二进制转换为十进制(正数)
关于负数的计算方法请移步:负数二进制