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

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

#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;
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值