C语言int直接转二进制

楼主偶然需要用到十进制转二进制的方法,百度一下方法好像都是模拟人工计算的,但是楼主想到在内存中数据不是本来就是二进制的吗,把每一位读取出来不就好

首先写个子函数查看一个1字节的数字某位是不是1

inline bool is1(char n,int p){//一个1字节的数字n查看他第p位是不是1
  return n&(1<<(8-p-1));
}

然后由于楼主电脑上int是大端模式保存的,所以最低位在第一个字节,最高位在最后一个字节,因此

int main(){
  int a=0b00000000111111110000111111110000;
  char *p=(char*)&a;//指向a的首地址
  for(int i=0;i<8;++i){
    putchar(is1(p[3],i)?'1':'0');
  }
  for(int i=0;i<8;++i){
    putchar(is1(p[2],i)?'1':'0');
  }
  for(int i=0;i<8;++i){
    putchar(is1(p[1],i)?'1':'0');
  }
  for(int i=0;i<8;++i){
    putchar(is1(p[0],i)?'1':'0');
  }
  getchar();
	return 0;
}

测试结果正确

再优化一下,最终可以写成这样

void tobin(int a,char* str){
  char *p=(char*)&a,c=0,f=0,pos=-1;//p指向a的首地址
  for(int o=0;o<4;++o){
    for(int i=0;i<8;++i){ 
      c=p[3-o]&(1<<(7-i));
      if(!f&&!(f=c))continue;
      str[++pos]=c?'1':'0';
    }
  }
}

转载请注明出处https://blog.csdn.net/rtduq/article/details/80274601

猜你喜欢

转载自blog.csdn.net/rtduq/article/details/80274601
今日推荐