Java 中实现十进制数转换为二进制
第一种:除基倒取余法
这是最符合我们平时的数学逻辑思维的,即输入一个十进制数 n,每次用 n 除以 2,把余数记下来,再用商去除以 2... 依次循环,直到商为 0 结束,把余数倒着依次排列,就构成了转换后的二进制数。
那么,在实际实现中,可以用 int 的一个数来存储最后的二进制,每次求余后把余数存储在 int 型数的低位,依次递增。
- public void binaryToDecimal(int n) {
- int t = 0; //用来记录位数
- int bin = 0; //用来记录最后的二进制数
- int r = 0; //用来存储余数
- while (n != 0) {
- r = n % 2;
- n = n / 2;
- bin = r * Math().pow(10, t);
- t++;
- }
- System.out.println(bin);
- }
但是 int 型最大只能表示 2^31-1 的正数,所以,存储的二进制数位数有限;我们都知道,int 在 java 中的存储范围是 32 位,则可以使用字符串的拼接(+)来实现,代码如下:
- public void binaryToDecimal(int n) {
- String str = "";
- while (n != 0) {
- str = n % 2 + str;
- n = n / 2;
- }
- System.out.println(str);
- }
第二种:利用 "移位" 操作实现
我们可以直接利用移位操作对一个十进制数进行移位操作,即:将最高位的数移至最低位(移 31 位),除过最低位其余位置清零,使用 & 操作,可以使用和 1 相与(&),由于 1 在内存中除过最低位是 1,其余 31 位都是零,然后把这个数按十进制输出;再移次高位,做相同的操作,直到最后一位 ,代码如下。可以说,这是我到目前为止见到的最简单的实现方式了。
- public void binaryToDecimal(int n){
- for(int i = 31;i >= 0; i--)
- System.out.print(n >>> i & 1);
- }
说明:由于计算机中存储的都是数的补码,正数的原码、反码、补码都是相同的;而负数的原码、反码、补码是不一样的,补码 = 原码取反 + 1(符号位不变)。所以,负数是按照它的补码输出的。
>>> 为逻辑移位符,向右移 n 位,高位补 0
>> 算数移位符,也是向右移 n 位,不同的是:正数高位补 0,负数高位补 1
<< 移位符,向左移 n 位,低位补 0
第三种:调用 API 函数
这是处理问题更符合面向对象的一种方式:
- public void function1(int n) {
- String result = Integer.toBinaryString(n);
- //int r = Integer.parseInt(result);
- //System.out.println(r);
- System.out.println(result);
- }
小小的建议: 此代码中,可以直接用字符串输出;也可以利用 Interger.parseInt() 转化为 int,但不建议这种方式,当为负数时,int 型的表示不了 32 的一个整数
来源: http://www.cnblogs.com/vsign/p/7290594.html