使用标准库中的 bitset
#include "iostream"
#include "bitset"
using namespace std;
int main() {
int num;
cout << "输入一个十进制数字: ";
cin >> num;
// 使用 bitset 来转换十进制数
// 32 表示 bitset 的大小,足以容纳 int 类型的二进制表示
bitset<32> binary(num);
cout << "十进制 " << num << " 转换为二进制为: " << binary << endl;
return 0;
}
使用标准库中的 sprintf
#include "stdio.h"
int main() {
int num = 10; // 十进制数
char binaryStr[33]; // 二进制字符串,足够存放32位整数的二进制表示加上一个结束符'\0'
// 使用 sprintf 将十进制数转换为二进制字符串
sprintf(binaryStr, "%32s", ""); // 初始化字符串,全部填充为空格
for (int i = 31; i >= 0; i--) {
int k = num >> i;
if (k & 1)
binaryStr[31 - i] = '1';
else
binaryStr[31 - i] = '0';
}
printf("十进制数 %d 的二进制表示为: %s\n", num, binaryStr);
return 0;
}
使用位操作 包含负数
#include "bits/stdc++.h"
using namespace std;
uint32_t d2b(int32_t n){
if(n>=0){
return(uint32_t)n;
}else{
return ~((uint32_t)(-n))+1;
}
}
int main(){
int32_t d_num;
cin >> d_num;
uint32_t b_num = d2b(d_num);
bitset<32> bb(b_num);
cout << bb << endl;
return 0;
}
//**************************
#include "stdio.h"
#include "stdint.h"
// 函数用于将十进制数转换为16位二进制补码
uint32_t d2b(int32_t d_num) {
// 如果是正数或0,直接返回其二进制表示
if (d_num >= 0) {
return (uint32_t)d_num;
} else {
// 对于负数,先取反再加1
return ~((uint32_t)(-d_num)) + 1;
}
}
int main() {
int32_t d_num = -255;
uint32_t b_num = d2b(d_num);
// 打印32位二进制数
for (int i = 31; i >= 0; --i) {
printf("%d", (b_num >> i) & 1);
if (i == 8) {
printf(" "); // 在第9位后添加空格,方便阅读
}
if (i == 16) {
printf(" "); // 在第17位后添加空格,方便阅读
}
if (i == 24) {
printf(" "); // 在第25位后添加空格,方便阅读
}
}
printf("\n");
return 0;
}
正文完