Java中十进制数转二进制数的方法Java中十进制数转二进制数的方法
import java.util.Stack;
public class Test {
public static void main(String[] args) {
System.out.println(toBinary(32)); //第一种
String string = Integer.toBinaryString(32);//第二种
System.out.println(string);
}
public static String toBinary(int a)...
Java中十进制数转二进制数的方法
import java.util.Stack;
public class Test {
public static void main(String[] args) {
System.out.println(toBinary(32)); //第一种
String string = Integer.toBinaryString(32);//第二种
System.out.println(string);
}
public static String toBinary(int a) {
String str = "";
Stack s = new Stack();
while (a != 0) {
s.push(a % 2);
a = a / 2;
}
while (!s.empty()) {
str += s.pop();
}
return str;
}
}
十进制数转二进制数,跟据不同的开发语言其转换方式有很多,在Java中如果相把一个十进制的整数来转换成二进制那是举手之劳,非常简单,只要用Integer.toBinaryString(int)
方法就可以得到结果。但如果转换的不是一个整数,而是一个带小数部分的十进制数,那就没有那么容易了。由于整数和小数的转换方式不同,所以先将十进制数的整数部分和小数部分分别转换后,再合并转换后的结果即得到想要的结果。
十进制数转二进制数的算法如下:
1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
2(十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,
后取的整数作为低位有效位。
下面就给出根据十进制数转二进制数的算法所写的一段Java程序以供大家参考:
1.import java.math.BigDecimal;
2.3.public class Test {
4.5. public static void main(String[] args) { 6. Test t = new Test();
7. double d = 8;
8. String s = t.decimal2BinaryStr(d); 9. System.out.println("十进制数"+d+"转成二进制数为:"+s);
10. }
11.12. /**
13. * 十进制数转二进制数
14. * @param d 十进制数
15. * @return 十进制数转换成二进制的字符串
16. */17. public String decimal2BinaryStr(double d){
18. String result = decimal2BinaryStr_Inte(d); 19. result += decimal2BinaryStr_Deci(d); 20. return result;
21. }
22.
23. /**
24. * 十进制整数部分转二进制数
25. * @param d 十进制数
26. * @return 十进制整数部分转换成二进制的字符串
27. */28. public String decimal2BinaryStr_Inte(double d){
29.// return Integer.toBinaryString((int)d); 30. /*
31. * 本来利用上面的Integer.toBinaryString(int)就可以得到整数部分的二进制结果,
32. * 但为了展示十进制转二进制的算法,现选择以下程序来进行转换
33. */34. String result = ""; 35. long inte = (long)d;
36. int index = 0;
37. while(true){
38. result += inte%2;
39. inte = inte/2;
40. index++;
41. if(index%4 == 0){
42. result+=" ";
43. }
44. if(inte==0){
45. while(index%4!=0){ 46. result+="0";
47. index++;
48. }
49. break;
50. }
51. }
52. char[] c = result.toCharArray(); 53. char[] cc = new char[c.length]; 54. for(int i=c.length; i>0; i--){ 55. cc[cc.length-i] = c[i-1]; 56. }
57. return new String(cc);
58. }
59.
60. /**
61. * 十进制小数部分转二进制
62. * @param d 十进制数
63. * @return 十进制小数部分转换成二进制小数的字符串
64. */65. public String decimal2BinaryStr_Deci(double d){
66. return decimal2BinaryStr_Deci(d, 0); 67. }
68.
69. /**
70. * 十进制小数部分转二进制
71. * @param d 十进制数
72. * @param scale 小数部分精确的位数
73. * @return 十进制小数部分转换成二进制小数的字符串
74. */75. public String decimal2BinaryStr_Deci(double d, int scale){
76. double deci = sub(d,(long)d); 77. if(deci==0){
78. return "";
79. }
80. //为了防止程序因所转换的数据转换后的结果是一个无限循环的二进制小数,因此给其一个默认的精确度
81. if(scale==0){
82. scale = (String.valueOf(deci).length()-2)*4;
83. }
84. int index = 0;
85. StringBuilder inteStr = new StringBuilder();
86. double tempD = 0.d;
87. while(true){
88. if(deci==0 || index==scale){ 89. while(index%4!=0){ 90. inteStr.append("0"); 91. index++;
92. }
93. break;
94. }
95. if(index==0){
96. inteStr.append("."); 97. }
98. tempD = deci*2;
99. inteStr.append((int)tempD); 100. deci = sub(tempD ,(int)tempD); 101. index++;
102. if(index%4 == 0){
103. inteStr.append(" "); 104. }
105. }
106. return inteStr.toString(); 107. }
108.
109.
110. /**
111. * 提供精确的减法运算。
112. * @param v1 被减数
113. * @param v2 减数
114. * @return 两个参数的差
115. */116. public static double sub(double v1, double v2) {
117. BigDecimal b1 = new BigDecimal(Double.toString(v1));
118. BigDecimal b2 = new BigDecimal(Double.toString(v2));
119. return b1.subtract(b2).doubleValue(); 120. }
121.}
例如将十进制数1234.5转成二进制数为:0100 1101 0010.1000
本文来自CSDN博客,转载请标明出处:
本文档为【Java中十进制数转二进制数的方法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。