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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章