c++ 十进制转成八位二进制的问题

来源:百度知道 编辑:UC知道 时间:2024/09/25 23:21:32
例如给出a[3]={228,117,62}
得出结果b[24]={1,1,1,0,0,1,0,0,0,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,}
最好写成一个子程序的样子
dec2bin(int a,int Nbit)
a[3]={228,117,62}
Nbit为转换成Nbit位二进制
b=dec2bin(a,8)
注意:需要实现可以选择多少位转换
就是不单单像问题所提出的实现8位转换,还要实现10或或16位转换
就是可选择位数的转换

由于我设计的时候是定义了一个字节的结构体,所以保存的只能是以字节数为单位的,任何位数比较困难,可以解决8的倍数位的,其它的不行,下面是程序,如果要你那种要求那就得另外想算法,不过一般也没必要算任意位数吧,就算是内存他也是以字节为单位进行编码的

不需要计算的算法:用位段处理,自已好好看看,估计没有比这个算法更高效的了

#include <stdio.h>
#include <string.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;
void dec2bin(int *a,char *b,int n) //保存N个字节
{
bit *p_bit;
int i,j;
for(i=0;i<3;i++)
{
p_bit=(bit *)a++;
for(j=n-1;j>=0;j--)
{
*b++=(p_bit+j)->bit_8;
*b++=(p_bit+j)->bit_7;
*b++=(p_bit+j)->bit_6;
*b++=(p_bit+j)->bit_5;
*b++=(p_bit+j)->bit_4;
*b++=(p_bit+j)->bit_3;
*b++=(p_bit+j)->bit_2;
*b++=(p_bit+j)->bit_1;
}<