输出一个整型数据的二进制形式

一般人会考虑用位运算,程序代码如下:

#include < stdio.h >

void  Print( int  n)
{
    
if(n==1||n==0)
    
{
        printf(
"%d",n);
        
return;
    }

    Print(n
>>1);
    printf(
"%d",n%2);
}


int  main()
{
    
int a;
    scanf(
"%d",&a);
    Print(a);
    
return 0;
}

 我们现在用一种特别的方法.用位段,可以不用进行运算即可输出结果,首先我们用一个程序输出整型数据在内存中的形式,程序代码如下:

 

#include  < stdio.h >
#include 
< stdlib.h >

typedef 
struct
{
        unsigned 
char bit_1 : 1;
        unsigned 
char bit_2 : 1;
        unsigned 
char bit_3 : 1;
        unsigned 
char bit_4 : 1;
        unsigned 
char bit_5 : 1;
        unsigned 
char bit_6 : 1;
        unsigned 
char bit_7 : 1;
        unsigned 
char bit_8 : 1;
}
bit;

int  main()
{
        
int *p_int=NULL, len=sizeof(int);
        bit 
*p_bit=(bit *)malloc(len*sizeof(bit));
        p_int
=(int *)p_bit;
        
*p_int=0;
        printf(
"Please input a int value!  ");
        scanf(
"%d",p_int);
        
while(len--)//从高位到低位依次输出
                printf("%d%d%d%d%d%d%d%d  ", (p_bit+len)->bit_1, (p_bit+len)->bit_2, 
                (p_bit
+len)->bit_3, (p_bit+len)->bit_4,
                (p_bit
+len)->bit_5, (p_bit+len)->bit_6, 
                (p_bit
+len)->bit_7, (p_bit+len)->bit_8) ;
        printf(
" ");
        free(p_bit);
        
return 0;
}

如果要输出一个整型数据的二进制形式,对于小端的编译器,上面的即可,而大端编译器则需要将输出的顺序1-8颠倒一下即可.下面是适合大端的编译器.(VC++ 6.0是大端编译器)

 

#include  < stdio.h >
#include 
< stdlib.h >

typedef 
struct
{
        unsigned 
char bit_1 : 1;
        unsigned 
char bit_2 : 1;
        unsigned 
char bit_3 : 1;
        unsigned 
char bit_4 : 1;
        unsigned 
char bit_5 : 1;
        unsigned 
char bit_6 : 1;
        unsigned 
char bit_7 : 1;
        unsigned 
char bit_8 : 1;
}
bit;

int  main()
{
        
int *p_int=NULL, len=sizeof(int);
        bit 
*p_bit=(bit *)malloc(len*sizeof(bit));
        p_int
=(int *)p_bit;
        
*p_int=0;
        printf(
"Please input a int value!  ");
        scanf(
"%d",p_int);
        
while(len--)
                printf(
"%d%d%d%d%d%d%d%d  ", (p_bit+len)->bit_8, (p_bit+len)->bit_7, 
                (p_bit
+len)->bit_6, (p_bit+len)->bit_5,
                (p_bit
+len)->bit_4, (p_bit+len)->bit_3, 
                (p_bit
+len)->bit_2, (p_bit+len)->bit_1) ;
        printf(
" ");
        free(p_bit);
        
return 0;
}

 

 

### C++ 输出整数二进制表示 在 C++ 中,可以通过多种方式将整数转换为二进制字符串并输出。以下是几种常见的方法: #### 使用 `bitset` 类 `<bitset>` 头文件提供了 `std::bitset` 模板类,可以直接用于处理固定长度的二进制序列。 ```cpp #include <iostream> #include <bitset> int main() { int num = 5; std::cout << "整数 5 的二进制表示:" << std::bitset<8>(num) << std::endl; return 0; } ``` 这段代码会输出带有前导零的 8 位二进制表示[^1]。 #### 自定义函数逐位提取 如果不想依赖于特定库,也可以编写自定义函数来手动构建二进制字符串。 ```cpp #include <iostream> #include <string> std::string toBinary(int number) { if (number == 0) return "0"; bool isNegative = false; if(number < 0){ isNegative = true; number = -number; } std::string binaryString = ""; while (number > 0) { binaryString = char('0' + (number % 2)) + binaryString; number /= 2; } if(isNegative){ // 补充符号位和其他必要的逻辑以支持负数 // 此处简化处理仅适用于正数情况 } return binaryString.empty()? "0":binaryString; } int main(){ int value = 97; std::cout << "整数 " << value << " 转换成二进制是: " << toBinary(value) << "\n"; return 0; } ``` 此版本适合简单场景下的正整数转换;对于完整的解决方案还需要考虑负数值的情况以及更高效的算法优化[^2]。 #### 利用流操纵器 还可以通过设置输入/输出流的状态标志来控制数据格式化的方式,在某些编译环境下可能需要额外安装第三方库或启用特殊选项才能生效。 ```cpp #include <iomanip> #include <iostream> int main(){ unsigned short val = 42; // 设置基数为2(即二进制) std::cout<< "十进制值 "<<val<<" 的二进制表示形式为 "; std::cout<< std::setbase(2)<<val<<"\n"; // 或者使用 showbase 显示前缀 std::cout<< "显示前缀:"<<std::showbase; std::cout<< std::setw(16); // 设定宽度填充空白字符 std::cout<< std::internal; // 前置填充到内部位置 std::cout<< std::setfill('_'); // 定义填充字符'_' std::cout<< std::setbase(2); std::cout<< val<<"\n"; return 0; } ``` 上述例子展示了如何利用标准库提供的工具轻松完成任务的同时还能够灵活调整输出样式[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值