c语言,源代码,进制转换,解释源代码

详细解释这段源代码

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进制转二进制
{
int i,n=0;
for(i=0;i<16;i++)//默认取int为16位 可以改成32位
{
    n*=10;//跟pow一样进行进位 
    if(a&0x8000)//取出a的最高位 当为32位时0x8000修改成0x80000000即可
        n++;//如果该位为1则+1
    a<<=1;//a的值向左移动一位循环获取到全部位
}
return n;//返回转换结果
}

这种方法在执行效率上提升了很多。


随便

有些地方需要使用到二进制的这里有个宏定义 方便二进制直接转换为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))

#define BinToHex(n) B(0x##n##l)

执行效果:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-26
pow (x,y)计算x的y次幂etx把相应位加入到数字钟个位是1rvz十位是239百位是3,千位是7,那么这个数字应该是  1*pow(10,0)+2*pow(10,1)+3*pow(10,2)+7*pow(10,3)=1+20+300+7000=7321
第2个回答  2013-09-26
pow (x,y)
计算x的y次幂。
把相应位加入到数字钟
个位是1,十位是2,百位是3,千位是7,那么这个数字应该是
1*pow(10,0)+2*pow(10,1)+3*pow(10,2)+7*pow(10,3)=1+20+300+7000=7321追问

,就是不知道这段代码是怎么实现的倒叙关系,pow是一个前后调换的函数,还有具体他判断除余运算的过程,我感觉很混乱

追答

十进制每次除完的余数应该是最高位, 所以是倒序

追问

我的意思是如何实现倒叙

追答

计算过程中就是倒叙,没有倒叙的实现,就是计算了就倒叙了

第3个回答  2013-09-26
你首先要了解,十进制转二进制,就是不断除2求余的过程追问

倒叙我知道,就是不知道这段代码是怎么实现的,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

追答

不好意思,我的修正我的答案,一般第一次求出的余数是在最低位,而不是最高位,对不起,我昨天记错了,用数组保存的话,第一次求出的是在最高位,所以要反转,抱歉

第4个回答  2013-09-26
说的飞洒地方
相似回答