十进制转二进制

来源:互联网 发布:淘宝店铺类目怎么设置 编辑:程序博客网 时间:2024/06/05 21:50

声明:最后一种降幂法颇具魅力,而且与方法二有异曲同工之妙

十进制转二进制的几种方法

输入:一个无符号的十进制整数

输出:对应十进制的二进制显示

 

例如:input = 10,output = 1010

 

方法一:除二取余法

 

Forinput != 0

   Cout << input % 2

   Input /= 2;

End

 

输出顺序从低位0到高位(最高的1)依次输出

 

方法二:位运算

 

lowone = input & ~(input - 1)  //得到最低位的1对应的数值

input = input & (input - 1)     //从input中去除最低位的1

 

 

方法三:降幂算法

 

1.      Input > 2^n,(n要尽量大)

2.      Input > 2^n ,所以n位对应1

Compare( Input, 2^(n - 1)), 如果<,输出0;如果>=,输出1,且从input中减去后者。

n从n开始连续判断到0为止。

例子:

十进制整数100,那么n=6,因为2^6=64<100,2^7=128>100

二进制       十进制             二进制

1100100   100  > 2^6    =  1

100100      36  >  2^5    =  1          (36  =  100-2^6)

00100         4   <  2^4    =  0          (4   =  36-2^5)

0100           4    < 2^3    =  0          (4 维持上一次的结果)

100             4   =  2^2    =  1          (4 维持上一次的结果)

00               0    < 2^1    =  0          (0  =  4-2^2)

0                 0    < 2^0    =  0          (0 维持上一次的结果)

 

上式中红色代表二进制,黑色代表十进制,所以100的二进制等于1100100

原理:从高位向低位的顺序,判断每一位是1还是0.

 

定理:一个十进制整数肯定大于等于只留下它的最高位1(二进制)对应的十进制数,例如5101>4100),7111>4100)。

 

所以,只要满足上面的定理,就知道最高位的1处于第几位(从左往右,以0为起始位),即刚才说的“尽量大的n”。然后,减掉这个2^n(最高位1对应的十进制数),进行下一次的判断,对比2^(n-1).因为最高的1已经确定在第n位,那么接下来当然判断n-1位。而且,前面的减去2^n就等价于去掉原先最高位的1.

0 0
原创粉丝点击