引言
最近项目过程中,需要实现正负十进制数转二进制数(补码),原理这里就不展开讲了,网上有许多资料可以参考。本来是不想重复造轮子,但在现有的一些代码中,没有找到特别适合自己情况的方法。因此,我尝试自己实现一个这样的函数。
实现代码
主要的实现思路是用位的或(^)、与(&),注释写在代码里了。
#include "iostream"
#include "bitset"
using namespace std;
// 实际需要使用的是2字节的int,因此这里用short int作为形参
// 当然,形参用int类型也可以实现十进制转二进制,这里主要讲的是思路
void Dec2Bin(short int num) {
if (num < 0) {
//负数的要获得补码的情况要单独考虑
num = abs(num);
//取反,加1,得补码
num = num ^ 0xffff;
num = num + 1;
}
bitset<sizeof(num) * 8> n_bit(num);
cout << "转换后的二进制为:" << n_bit << endl;
/*
如果需要将这两个字节的高低8位分别取出来操作的话,则可以用下面这段代码
short int n_low = num & 0xff;
short int n_high = (num >>8) & 0xff;
bitset<sizeof(n_low) * 4> n_bit1(n_low);
bitset<sizeof(n_high) * 4> n_bit2(n_high);
cout << n_bit2<<endl<<n_bit1;
*/
}
int main(int argc, char *argv[]){
short int n;
cout << "输入需要转换的十进制数:";
cin >> n;
Dec2Bin(n);
system("pause");
return 0;
}
结果
将运行的结果与计算器结果进行比较验证,如下:
正数:
负数:
负数计算器结果看似与程序结果不太一样,这是因为计算机是64位的,所以其自带的计算器也是64位的。实则两者结果是一致的。