详细解释这段源代码
int two(int a)//将十进制转化为二进制的函数
{
int i,n=0;
for(i=0;(a/2)!=0;i++)//不断取余数
{
if((a%2)!=0)//通过这个if将余数倒叙排放。
n=n+(a%2)*pow(10,i);//pow需要解释
a=a/2;
}
n=n+a%2*pow(10,i);//加上首位的数
return(n);
}
在计算机中只有二级进制 10进制跟16进制是为了让开发者便于理解而做出的转换
二进制在十进制的代表是
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
整个过程都是2的倍数
所以10进制转换为2进制只要不断的取余数即可
pow是为了在以10进制显示二级制数的情况下进行进位
如果没有pow 在运算的时候就会出现1 + 0 + 1 + 1这种情况出现 得出来的值只为3。
所以在运算第2位的时候就需要x10了 第三位就x100 第四位就x1000 以此类推
最后的结果就是1*1000+0*100+1*10+1=1011
由于在计算机中 所有数据都是以二进制存放的
所以直接用二进制来运算会方便很多
int DecToBin(int a)//10进制转二进制这种方法在执行效率上提升了很多。
随便
有些地方需要使用到二进制的这里有个宏定义 方便二进制直接转换为16进制
#define B(n) (((n>>21)&0x80)|((n>>18)&0x40)|((n>>15)&0x20)|((n>>12)&0x10)|((n>>9)&0x08)|((n>>6)&0x04)|((n>>3)&0x02)|((n)&0x01))执行效果:
,就是不知道这段代码是怎么实现的倒叙关系,pow是一个前后调换的函数,还有具体他判断除余运算的过程,我感觉很混乱
追答十进制每次除完的余数应该是最高位, 所以是倒序
追问我的意思是如何实现倒叙
追答计算过程中就是倒叙,没有倒叙的实现,就是计算了就倒叙了
倒叙我知道,就是不知道这段代码是怎么实现的,pow是一个前后调换的函数,还有具体他判断除余运算的过程,我感觉很混乱
追答比如拿11说
对2求余为1,除2后为5,这个余数1记为二进制数的最高位 ,为1
5对2求余为1,除2后为2,这个余数1记为二进制数的第二位,即为11
2对2求余为0,除2后为1,这个余数0记为二进制数的第三位,即为110
1对2求余为1,除2后为0,这个余数0记为二进制数的第四位,即为1101
第一次求出的的在最高位,肯定要调转位置啊
我的意思是如何用代码实现,而不是为什么要实现倒叙,还有后面的除余运算
追答你可以取得余数后,给上次取得的余数乘以10,再加上这次取得的余数,不停的这样就行啊
不许要专门倒转
int two(int n)
{
int a=0;
while (n!=0)
{
a*=10;
a+=n%2;
n=n/2;
}
return a;
}
好,你再看一下这个,http://zhidao.baidu.com/question/687047600218958044.html?quesup2&oldq=1
追答不好意思,我的修正我的答案,一般第一次求出的余数是在最低位,而不是最高位,对不起,我昨天记错了,用数组保存的话,第一次求出的是在最高位,所以要反转,抱歉