樓主偶然需要用到十進制轉二進制的方法,百度一下方法好像都是模擬人工計算的,但是樓主想到在內存中數據不是本來就是二進制的嗎,把每一位讀取出來不就好
首先寫個子函數查看一個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