十进制转化二进制

最近我在刷一道题是碰到这样一道题,题目如下
汉明距离

我的思路是先将十进制的数字转化为二进制,然后存进字符串中,在这里我用StringBuffer类,因为如果要逐个修改字符串中的字符的话String类是做不到的.然后用到String Buffer中的append方法将每一个二进制位添加到字符串中代码如下

	StringBuffer sf1 = new StringBuffer();
        do{
            sf1.append((char)y % 2);   
            y = y / 2;
        }while(y > 0);

解体过程中的出现的问题很多,比如while循环中的判断—到底到在哪里截至,这个十分重要.还有do while和while循环的区别以及其作用 (十分重要) 因为我在这个坑中倒了很多次…扎心

最后公布一下我的所有代码 希望对你有帮助

class Solution {
	StringBuffer sf1 = new StringBuffer();
    StringBuffer sf2 = new StringBuffer();
    public int hammingDistance(int x, int y) {
        

        do{
            sf2.append((char)y % 2);
            y = y / 2;
        }while(y > 0);
        do{
            sf1.append((char)x % 2);
            x = x / 2;
        }while(x > 0);
        
        int count = 0;   //记录不同的二进制位
        
        if(sf1.length() > sf2.length()){              //将二进制位数少的那个数 用0补全
            for(int i = sf2.length(); sf1.length() != sf2.length(); i++){
                sf2.append('0');
            }
            for(int i = 0; i < sf1.length(); i++){
                if(sf1.charAt(i) != sf2.charAt(i)){
                    count++;
                }
            }
        }
        else{
            for(int i = sf1.length(); sf1.length() != sf2.length(); i++){
                sf1.append('0');
            }
            for(int i = 0; i < sf1.length(); i++){
                if(sf1.charAt(i) != sf2.charAt(i)){
                    count++;
                }
            }          
        }
        return count;

    }

}
//本来计算完二进制后需要倒置的,因为本题中不做要求,所以简写,当然可以添加,一个for循环就行.

说到底还是自己菜,本来挺简单的代码写了很久. 唉…

上网百度了一下十进制转二进制算法,还挺多这里转载一篇用于学习

转载链接:https://www.cnblogs.com/vsign/p/7290594.html

如有问题请与我联系

Java中实现十进制数转换为二进制

第一种:除基倒取余法

这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数。

那么,在实际实现中,可以用int的一个数来存储最后的二进制,每次求余后把余数存储在int型数的低位,依次递增。

复制代码
 1   public void binaryToDecimal(int n){
 2       int t = 0;  //用来记录位数
 3       int bin = 0; //用来记录最后的二进制数
 4       int r = 0;  //用来存储余数
 5       while(n != 0){
 6           r = n % 2;
 7           n = n / 2;
 8           bin += r * Math().pow(10,t);
 9           t++; 
10      }
11          System.out.println(bin);
12  }
复制代码

 

但是int型最大只能表示2^31-1 的正数,所以,存储的二进制数位数有限;我们都知道,int在java中的存储范围是32位,则可以使用字符串的拼接(+)来实现,代码如下:

复制代码
1  public void binaryToDecimal(int n){
2      String str = "";
3      while(n!=0){
4          str = n%2+str;
5          n = n/2;
6      }
7          System.out.println(str);
8 }
复制代码

 

第二种:利用“移位”操作实现

我们可以直接利用移位操作对一个十进制数进行移位操作,即:将最高位的数移至最低位(移31位),除过最低位其余位置清零,使用& 操作,可以使用和1相与(&),由于1在内存中除过最低位是1,其余31位都是零,然后把这个数按十进制输出;再移次高位,做相同的操作,直到最后一位 ,代码如下。可以说,这是我到目前为止见到的最简单的实现方式了。

1 public void binaryToDecimal(int n){
2      for(int i = 31;i >= 0; i--)
3          System.out.print(n >>> i & 1);
4 }

 

说明:由于计算机中存储的都是数的补码,正数的原码、反码、补码都是相同的;而负数的原码、反码、补码是不一样的,补码=原码取反+1(符号位不变)。所以,负数是按照它的补码输出的。

>>>为逻辑移位符,向右移n位,高位补0
>> 算数移位符,也是向右移n位,不同的是:正数高位补0,负数高位补1
<< 移位符,向左移n位,低位补0

第三种:调用API函数

这是处理问题更符合面向对象的一种方式:

复制代码
1 public void function1(int n){
2      String result = Integer.toBinaryString(n);
3      //int r = Integer.parseInt(result);
4      //System.out.println(r);
5      System.out.println(result);
6  }
复制代码

 

小小的建议:  此代码中,可以直接用字符串输出;也可以利用Interger.parseInt()转化为int,但不建议这种方式,当为负数时,int型的表示不了32的一个整数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我了解您的问题。实现十进制转二进制可以使用顺序栈来模拟,具体步骤如下: 1.将十进制入栈。 2.用栈顶元素除以二,得到商和余,余入栈。 3.重复第2步,直到商为0。 4.弹出栈中所有元素,即为该十进制二进制表示。 需要注意的是,在弹出栈中元素时,要注意顺序,以得到正确的二进制表示。 希望我的回答对您有所帮助。 ### 回答2: 十进制转化二进制的过程可以通过顺序栈来实现。首先,我们需要创建一个空栈,作为二进制的容器。 将十进制从右往左依次除以2,将余依次压入栈中,直到除完。 接下来,我们开始弹出栈中的元素,即从栈中取出元素,直到栈为空。将弹出的元素依次排列起来,即为十进制二进制表示。 举个例子,我们将十进制13转化二进制。 首先,将13除以2,得到的余为1,将1压入栈中。然后将13除以2,得到的商为6,再次除以2,得到余为0,将0压入栈中。最后,将6除以2,得到的商为3,再次除以2,得到的余为1,将1压入栈中。 现在我们开始弹出栈中的元素,依次为1、0、1。将它们按照弹出顺序排列起来,得到的二进制表示为101。 因此,十进制13转化二进制的结果是101。 以上就是使用顺序栈实现十进制转化二进制的过程。通过这种方法,我们可以将任意十进制转化为对应的二进制。 ### 回答3: 十进制转化二进制可以通过顺序栈来实现。首先,我们需要明确十进制转换为二进制的原理。 在十进制转换为二进制时,我们需要不断地除以2,并将余存入栈中。具体操作如下: 1. 初始化一个空的顺序栈。 2. 将十进制除以2,并取得其余。 3. 将余入栈。 4. 将十进制除以2取整,然后继续执行第2步骤,直到十进制变为0. 5. 从栈顶开始依次弹出栈中的元素,即可得到二进制。 下面是一个具体的例子来说明: 以十进制12转化二进制为例。 1. 初始化一个空的顺序栈。 2. 12除以2,得到6余0。将余0入栈。 3. 6除以2,得到3余0。将余0入栈。 4. 3除以2,得到1余1。将余1入栈。 5. 1除以2,得到0余1。将余1入栈。 6. 十进制变为0,停止除法运算。 7. 从栈顶开始弹出栈中的元素,得到的顺序就是12的二进制表示。 第一个弹出的元素是1,第二个是1,第三个是0,第四个是0。 因此,12的二进制表示为1100。 通过以上步骤,我们可以将任意的十进制转化二进制。这个过程中顺序栈的作用是将余按照反序存储,然后逐个弹出,最终得到正确的二进制表示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值