楼主偶然需要用到十进制转二进制的方法,百度一下方法好像都是模拟人工计算的,但是楼主想到在内存中数据不是本来就是二进制的吗,把每一位读取出来不就好
首先写个子函数查看一个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