输出一个整型数据的二进制形式
2007-12-18 22:45
309 查看
一般人会考虑用位运算,程序代码如下:
#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;
}
#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/C++直接输出一个数据的十六进制、八进制和二进制
- 【输出一个整数的二进制存储形式】
- 设计一个整型链表类list,能够实现链表节点的插入、删除、以及链表数据的输出操作。
- Java中如何得到一个整型数的二进制形式(十进制转化成二进制)
- java中将一个整数以二进制形式输出
- 早上偷懒 写的一个二进制形式输出的 方法雏形 嘿嘿
- 一个格式化输出二进制数据的工具
- 用递归函数实现输出一个数的二进制形式
- 将数据以二进制形式输出
- 个有10个元素的整型一维数组,用户输入9个数据,调用函数,对数组元素进行从小到大排序后,在函数中输入一个数,插入到数组中正确的位置,并输出
- 请求一个action,将图片的二进制字节字符串在视图页面以图片形式输出
- (基础四)进制转换,输出整型数值低四位二进制数据
- 分别输出一个整型数的二进制的奇数位和偶数位
- 获得一个数据在内存中存储的二进制形式
- 第十二周项目三(五):输出一个整数的二进制形式
- 把一个十进制数的二进制形式翻转,并输出翻转后所对应的十进制数
- 将任意一个十进制数数字转换为二进制形式,并输出转换后的结果