黑马程序员技术交流社区
标题:
关于十进制转换二进制
[打印本页]
作者:
noiary
时间:
2014-9-4 16:43
标题:
关于十进制转换二进制
本帖最后由 noiary 于 2014-9-4 16:45 编辑
/*
复习十进制转换二进制,发现了一些规律.萌生了一个想法:
十进制 二进制
1 1
2 10
3 11
4 10
5 101
6 100
7 111
8 100
规律:
偶数十进制对应的二进制都是0结尾
奇数十进制对应的二进制都是1结尾
十进制x转换成二进制y
偶数:(二进制)(x/2) * 10 = y
比如十进制8/2 = 4 4的二进制10 10*10 = 100
奇数 在上面公式计算结果后面+1,也就是把位数0改成1
如十进制7/2=3 3的二进制11 11*10 = 110 +1 = 111
下面我们随便找来个数字测试一下: 163
163 10100011
163/2 = 81 1010001
81/2 = 40 101000
40/2 = 20 10100
20/2 = 10 1010
10/2 = 5 101
5/2 = 2 10
2的二进制是10
5的二进制是10*10+1 = 101
10的二进制是101*10 = 1010
20的二进制是1010*2 = 10100
40的二进制是10100*10 = 101000
81的二进制是101000*10+1 = 1010001
163的二进制是101001*10+1 = 10100011
根据计算机calc计算这个数字是正确的.
下面来写一个用这种方法转换的程序.
*/
复制代码
没写出来......{:3_59:}{:3_65:}
哪位有闲工夫的好汉侠女,来一起研究~
作者:
李天富
时间:
2014-9-4 17:53
这个,怎么说呢,你仔细想一下2进制的笔算过程,这个真不是啥规律,一个数除以2的余数必然不是0就是1,所谓偶数不就是可以被2整除,也就是余数为0的数,奇数就是余数为1的数吗?你用int型数据做除法运算,自然是舍弃小数位了,也就是舍弃余数了。你这算法实际上也是拿一个数不断除以2,然后看余数,跟笔算过程是一样的,只不过你的算法是每做一次除法就把得数变成2进制,反而更麻烦了。
作者:
noiary
时间:
2014-9-6 22:59
李天富 发表于 2014-9-4 17:53
这个,怎么说呢,你仔细想一下2进制的笔算过程,这个真不是啥规律,一个数除以2的余数必然不是0就是1,所谓 ...
嗯嗯 后来琢磨来琢磨去, 其实套路还是不断除以二.
哎 好二~!
作者:
谢建平
时间:
2014-9-7 06:17
如果不考虑栈溢出 这个很方便
public class Test_2 {
static void main(String[] args) {
String s= parse(16);
System.out.print(s);
}
public static String parse(int i) {
if(i>0){
return ""+parse(i/2)+i%2;
}else{
return "";
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2