十进制数转二进制"/>
[C/C++] 十进制数转二进制
目录
- 引言
- 实现代码
- 结果
引言
最近项目过程中,需要实现正负十进制数转二进制数(补码),原理这里就不展开讲了,网上有许多资料可以参考。本来是不想重复造轮子,但在现有的一些代码中,没有找到特别适合自己情况的方法。因此,我尝试自己实现一个这样的函数。
实现代码
主要的实现思路是用位的或(^)、与(&),注释写在代码里了。
#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位的。实则两者结果是一致的。
更多推荐
[C/C++] 十进制数转二进制
发布评论