精华内容
下载资源
问答
  • 二进制转换十进制 算法解析

    千次阅读 2021-03-06 16:26:56
    java里面是有进制间互换现成的方法的:public class十进制与各进制的相互转换 {public static voidmain(String[] args){//java已经实现的机制:十进制转换为二进制int decimal = 10;System.out.println("十进制数:"+...

    java里面是有进制间互换现成的方法的:

    public class十进制与各进制的相互转换 {public static voidmain(String[] args){//java已经实现的机制:十进制转换为二进制

    int decimal = 10;

    System.out.println("十进制数:"+decimal+",转换为二进制:"+Integer.toBinaryString(decimal));

    System.out.println("十进制数:"+decimal+",转换为八进制:"+Integer.toOctalString(decimal));

    System.out.println("十进制数:"+decimal+",转换为十六进制:"+Integer.toHexString(decimal));

    System.out.println("二进制数:"+"1010" +",转换为十进制:"+Integer.valueOf("1010", 2));

    System.out.println("八进制数:"+"12" +",转换为十进制:"+Integer.valueOf("12", 8));

    System.out.println("十六进制数:"+"a" +",转换为十进制:"+Integer.valueOf("a", 16));

    }

    }

    结果:

    十进制数:10,转换为二进制:1010十进制数:10,转换为八进制:12十进制数:10,转换为十六进制:a

    二进制数:1010,转换为十进制:10八进制数:12,转换为十进制:10十六进制数:a,转换为十进制:10

    但如果不取Integer的内含方法,我们要怎么实现进制之间的转换呢?

    下面针对二进制-->十进制实现其算法过程:

    一般思维:

    当问到二进制数转为十进制数,大多数人脑里第一反应的应该是这样一个逻辑过程:

    二进制数:1010

    十进制数:1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 =  8 + 0 + 2 +0 = 10

    按这个思路,java代码可以这样实现:

    方法一:

    public intbinaryToDecimal(String inMsg){int x = 0;int mul = 1;for(int i = inMsg.length()-1;i>0;i--){

    x+= mul*(inMsg.charAt(i)=='1'?1:0);

    mul*=2;

    }

    System.out.println(mul);returnmul;

    }

    好奇在网上也找了下其他实现方法:

    方法二:

    String radix = "1010";

    public intmethod(String radix){int x = 0;for(charc:radix.toCharArray())

    x= x*2 + (c=='1'?1:0);

    System.out.println(x);returnx;

    }

    对比以上两个方法,方法一和我们平常的思维是一致的,但是方法二就不大好理解了,略作思考后,发现可以这样理解:

    1、从for(char c:radix.toCharArray())这行代码可以看出,需要将待求解的二进制数转换为char数组;显然,当待求解二进制数为1010时,char数组即为:char[1,0,1,0],数组中有4个元素,那么也就是说for循环要循环运行4次。

    2、显而易见,for循环里面的算式组成部分的(c=='1'?1:0)目的就是为了拿到当前循环时对应二进制数组下标的值。

    如:第一次循环,拿到二进制数组下标为0的值:1

    第二次循环,拿到二进制数组下标为1的值:0

    第三次循环,拿到二进制数组下标为2的值:1

    第四次循环,拿到二进制数组下标为3的值:0

    3、算法:x = x*2 + (c=='1'?1:0) 的原理解析:前半部分x*2,是为了实现二进制数组元素的幂次相乘(之前的int x = 0其实实现了char[]数组的size()-1的作用),后半部分获取了下次进行幂运算的char数组的元素值。

    解析:

    第一次循环:看方法二的第三行代码:int x = 0;x初始值为0,就导致了for循环第一次循环时,运算为:0*2+1  ,即只会得到算式(c=='1'?1:0)的值,即二进制数组第一个元素的值:1 ;这时循环已经进行了1次,还剩3次,所以这里的1会在后面的3次循环里分别乘以2 , 即1*2*2*2;

    第二次循环:算式为: (0*2 + 1)*2 + 0  == 0*2*2 + 1*2 + 0  ,第一部分0*2*2不用管,因为这个是int x=0起作用用的, 第二部分是第一次循环时得到1的第一次幂运算1*2, 第三部分就是二进制数组下标为1的元素:0,也是下一次循环会进行幂运算的数。   这时我们发现总共的4次循环已经进行了2次,剩下2次,所以这里的下次幂运算值:0会在后面的2次循环里分别乘以2,即0*2*2;

    第三次循环:算式为: ((0*2 + 1)*2 + 0)*2 +1  == 0*2*2*2 + 1*2*2 + 0*2 +1  ,第一部分0*2*2*2不用管,第二部分是第一次循环时得到1的第二次幂运算1*2*2, 第三部分是第二次循环时得到0的第一次幂运算0*2,第四部分就是二进制数组下标为2的元素:1,也是下一次循环会进行幂运算的数。   这时我们发现总共的4次循环已经进行了3次,剩下1次,所以这里的下次幂运算值:1会在后面的1次循环里乘以2,即1*2;

    第四次循环:算式为: (((0*2 + 1)*2 + 0)*2 +1 )*2 +1 == 0*2*2*2*2 + 1*2*2*2 + 0*2*2 +1*2 + 0  ,第一部分0*2*2*2*2不用管,第二部分是第一次循环时得到1的第三次幂运算1*2*2*2, 第三部分是第二次循环时得到0的第二次幂运算0*2*2,第四部分是第三次循环时得到1的第一次幂运算1*2,第五部分就是二进制数组下标为3的元素:0,也是下一次循环会进行幂运算的数。   这时我们发现总共的4次循环已经进行了4次,剩下0次,

    所以本次运算就是整个算法的结果: 0*2*2*2*2   +   1*2*2*2   +   0*2*2   +   1*2   +   0  =  0 + 8 + 0 + 2 + 0  =  10 ,这样看是不是觉得很熟悉!没错,其实原理还是和方法一一样样的。

    啰嗦了点,希望能帮到你理解!:)

    展开全文
  • Java十进制转二进制算法 一、编程思路 可以运用简单的数学的计算的方法。如下 这张图大家应该都不陌生,10(例子中的10)一直除以2,余数写在右面那一列,如果被整除右面写0,如果没有别整除,写他的余数,这样...

    Java十进制转二进制简单算法

    一、编程思路

    可以运用简单的数学的计算的方法。如下
    在这里插入图片描述
    这张图大家应该都不陌生,10(例子中的10)一直除以2,余数写在右面那一列,如果被整除右面写0,如果没有别整除,写他的余数,这样反反复复的除以2。除到除不了了为止,最后把余数倒着写出来,这就是高中老师教给我们的进制转换算法
    所以从这个例子可以看出的条件:
    1.需要我们(用户)从键盘获取一个十进制的数(用到Scanner扫描器)
    2.需要一直除以二(用到循环while或for)。
    3.我们最后的结果只要余数,所以你们会想到%号,可是大家别忘了,除完的结果还要继续除,所以还要用到/号。
    4.他的结果也很特别需要倒着输出。(用到数组来储存,然后在倒着输出)。

    二、导入Scanner

    在这里插入图片描述

    三、代码

    代码如下:

    	Scanner sc=new Scanner(System.in);//创建一个扫描器对象
    	int a;//创建一个变量a
    	int b[] = new int[32];//创建一个容量为32的一个数组;
    	int count = 0;//创建一个数组计数器
    	System.out.println("请输入一个十进制数:");//提示用户操作
    	a = sc.nextInt();//把扫描器输入的十进制值赋给a
    	while (a > 0) {
    	//因为上面我们说了二进制需要我们倒着写,所以干脆就把第一个余数存到数组最后一位
    		b[31 - count] = a % 2;
    		//上面算的是余数,a/=2是为了算下次a的值
    		a /= 2;
    		count++;//数组计数器
    	}
    	System.out.print("转换二进制为:")
    	for (int i = 0; i < b.length; i++) {
    		System.out.print(b[i]);//因为上面是倒着输入了,所以我们只需要用for正在输出就行了
    		if ((i + 1) % 8 == 0) {
    			System.out.print("|");//为了美观创建一个分界线
    		}
    		}
    

    结果:

    在这里插入图片描述

    #结论
    1.需要注意光用一个/或%都是不行的,并且在这个代码的循环语句里的逻辑必须是先算取余,再算除,否则就会落下第一余数。
    2.我刚采用的是倒着把余数往数组里输入,正着输出结果,当然也可以正着输入余数,倒着输出结果。

    展开全文
  • 十进制转换成二进制算法如下:1.给定一个数;2.根据十进制转换二进制的思想:把这个数除以2若为单数则为1,为偶数则为0,直到最后一个数为1为止。所以我们要做的就是用你给定的这个数除以2,如果结果为奇数则r=1...

    将十进制转换成二进制的算法如下:

    1.给定一个数;

    2.根据十进制转换二进制的思想:把这个数除以2若为单数则为1,为偶数则为0,直到最后一个数为1为止。所以我们要做的就是用你给定的这个数除以2,如果结果为奇数则r=1,否则r=0;如此循环下去,直到这个数〉=1。

    3.然后把r的值送到一个数组里面。最后把这个数组里面的内容从后面打印出来就可以了。

    import java.util.Scanner;

    public class ZhuanHuan {

    public static void main(String[] args){

    System.out.println("请输入一个十进制数:");

    Scanner reader = new Scanner(System.in);

    int n=0;

    int i=0;

    int r=0;

    n=reader.nextInt();

    int[] a =new int[10];

    do{

    if(n%2==1){

    r=1;

    }

    else {

    r=0;

    }

    a[i]=r;

    n=n/2;

    i++;

    }

    while(n>0);

    System.out.println("转化成的二进制是:");

    for (int j = i-1; j>=0; j--) {

    System.out.print(a[j]);

    }

    }

    }

    十进制整数转换为二进制整数采用"除2取余,逆序排列"法

    具体做法是:用2整除十进制整数,可以得到一个商和余数,再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二

    制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

    对于数值n,二进制最后一位=n%2;计算得到的结果是最后要输出的结果,使用递归函数,联系递归的特点:在递归语句之前计算n%2,在递归调用语句之后

    输出结果,这样先计算的结果反而在最后输出。

    import java.util.Scanner;

    public class ChangeTo2 {

    /**

    * @param args

    */

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    System.out.println("请输入一个整型的十进制数:");

    Scanner reader = new Scanner(System.in);

    int num = 0;

    num = reader.nextInt();

    System.out.print("转换后的二进制数为:");

    toBinary(num);

    }

    //递归函数

    static void toBinary( int num){

    int r;

    r = num%2;//最后一位要输出的,即使参数=1,还是要计算到这里结束,只取出余数就ok了。然后顺次返回上一级主调函数,继续执行剩下的……

    //如果商 1 / 2 = 0,计算就可以终止了,不需要再算

    if(num>=2){

    //精华,联系10进制转2进制的算法,每次除以2,取出余数,然后用新的商继续除以2,取出新余数……直到商为0,余数逆序输出即可

    toBinary(num/2);//把新的商作为参数递归调用

    }

    //在递归语句之后输出,这样就是倒叙输出

    System.out.print(r);

    }

    }

    展开全文
  • JAVA十进制转二进制

    2021-04-07 15:24:12
    JAVA十进制转二进制代码按位与运算无符号右移方法的调用无返回值 代码 因为计算机本身就是二进制存储数据,所以只需要把所需转化的数字的每一位和1进行与运算,再对每一位进行输出即可 public static void main...

    十进制转二进制

    方法1:右移输出

    因为计算机本身就是二进制存储数据,所以只需要把所需转化的数字的每一位和1进行 与 运算,再从int类型第一位开始对每一位进行输出即可,每输出4次输出一次空格。

    public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
         System.out.println("请输入要转换的正整数:");
         int n = sc.nextInt();
         System.out.print(n + " 转化为二进制的数为:");
         binaryNum(n);
     }
     public static void binaryNum(int n) {
         int i,j=0;;
         for (i = 31; i >= 0; i--){
             System.out.print((n>>>i) & 1);
             j++;
             if (j==4){
                 System.out.print(" ");
                 j=0;
                 continue;
             }
         }
     }
    

    相关知识点:
    1.按位与运算
    2.无符号右移

    3.方法的调用与接收
    4.无返回值

    5.Scanner输入
    6.for循环

    方法2:余数存数组再进行输出

    十进制转二进制时如何运算,大家都知道。我们要做的就是把运算过程交给计算机,直接得到结果,但是每次的余数都输出出来后,得到的一组数并不是我们要求的二进制数,而是我们所求二进制数的反序,这个时候需要反序来输出,我们就需要引入一个数组的方法。

     public static void main(String[] args) {
    	System.out.println("请输入一个整数");
    	Scanner sc = new Scanner(System.in);
    	int a = sc.nextInt();
    	int b, i;
    	int[] array = new int[32];
    	for (i = 0; i < array.length; i++) {
    	    b = a % 2;
    	    a = a / 2;
    	    array[i] = b;
    	}
    	System.out.print("这个数对应的二进制数为:");
    	for (i = 31; i >= 0; i--) {
    	    if ((i+1)%4 == 0){
    	        System.out.print(" ");
    	    }
    	    b=array[i];
    	    System.out.print(b);
    	}
    }
    

    相关知识点:
    1.Scanner输入
    2.for循环

    3.数组的定义及赋值

    方法3:栈

    也可以利用栈的原理(先进后出)来实现:

    public class test {
        public static void main(String[] args) {
            System.out.println("请输入一个正整数:");
            Scanner sc = new Scanner(System.in);
            int a = sc.nextInt();
            Stack<Integer> stack = new Stack<>();
            for (;a>1;a=a/2){
                stack.push(a%2);
            }
            stack.push(a);
            System.out.print("转换后为:");
            while (!stack.empty()){
                System.out.print(stack.pop());
            }
        }
    }
    
    展开全文
  • Java 10进制byte数组与16进制byte数组 及 在DES加解密中的使用
  • Integer.toBinaryString(data) //data为十进制,转换成二进制 Integer.toHexString(data) //data为十进制,抓换成十六进制 System.out.println(Integer.toBinaryString(100)); // 将100转换成二进制输出 ...
  • 方法一:使用java自代的Integer方法 代码如下: ... //十进制转换为二进制 System.out.println(Integer.toBinaryString(i)); //十进制转换为八进制 System.out.println(Integer.toOctalString(i)); ...
  • 十进制转二进制 这种经典的题目怎么不去写一写呢? 拿到这道题的思路如下: 因为二进制的特殊性,不是0就是1,所以一个if判断就可以了,其他的问题都是细节补充了(其实都是我想简单了)。 题析 (1)需要一个数组来...
  • java实现十进制二进制小数的互机制   本篇博客主要讲述用java实现十进制二进制小数的互(不调用java自带的函数)。后期可能会用MATLAB实现,因为我们信息安全的一个实验是要求用MATLAB实现的。 要求 ...
  • 十六进制转换成十进制的基本原理是按数位依次操作,将每一位依次展开乘以权值再求和。 Java代码实现: import java.util.Scanner; public class Main { public static void main(String[] args) { ...
  • 十进制转二进制数,跟据不同的开发语言其转换方式有很多,在Java中如果相把一个十进制的整数来转换成二进制那是举手之劳,非常简单,只要用Integer.toBinaryString(int)方法就可以得到结果。但如果转换的不是一个...
  • Java实现十进制整数到二进制的转换 如果想通过自己的代码来实现二进制转换,可使用此段代码,该代码通过输出的字符来表示二进制形式,另外要注意如果想了解该代码的思路。建议先了解计算机组成原理里的原码,反码...
  • 一段简单的java代码,十进制转二进制mip版关注:188答案:5悬赏:40解决时间 2021-01-23 23:14已解决2021-01-23 05:43代码如下,希望可以帮我说明白点这段代码。factorOfTwo到底是指的什么?这段代码是如何运行的?多谢...
  • 十进制转二进制算法

    万次阅读 2010-12-17 23:30:00
    这边我重新整理了十进制转二进制算法,添加了米算法,暂时是针对于无符号的整数。 这边我会一直更新算法,首先是无符号整数:代码如下 package masm.chapter1; public class DecimalToBinary { public ...
  • 十进制转成十六进制:Integer.toHexString(inti)十进制转成八进制Integer.toOctalString(inti)十进制转二进制Integer.toBinaryString(inti)十六进制十进制Integer.valueOf("FFFF",16).toString()八进制...
  • 对于进制转换,大家并不陌生,在机器或者程序中常用的进制也就是二进制,八进制,十进制,十六进制...。而对于我们,其实接触的最多其实是十进制二进制一般用于机器中表示,在数电,数逻,计算机组成,信息传输中...
  • 十进制转换成二进制算法如下:1。给定一个数;2。根据十进制转换二进制的思想:把这个数除以2若为单数则为1,为偶数则为0,直到最后一个数为1为止。所以我们要做的就是用你给定的这个数除以2,如果结果为奇数则r...
  • 进制转换(栈实现)

    2017-07-08 15:12:04
    利用栈实现进制转换,支持16进制以下进制(2-10、16),更改相应的参数还可扩展其他进制转换,还可以通过更改宏定义来扩宽进制转换的数据范围。用户通过输入想要转换的进制和待转换的数字
  • C语言中十六进制转十进制两种实现方法C语言 · 十六进制转十进制问题描述从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、...
  • 试题 基础练习 十进制转十六进制 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示...
  • java任意进制转换

    2021-02-12 20:17:25
    java任意进制转换前言我们正常使用...调用函数十进制转十六进制Integer.toHexString(int i)十进制转八进制Integer.toOctalString(int i)十进制转二进制Integer.toBinaryString(int i)十六进制转十进制(二进制八进制...
  • N 个元素形成组合的话,用二进制位来表示每个元素是否被放到组合里,就是: 看到这里,应该就非常清楚了吧,每种组合都可以拆解为 N 个二进制位的表达形式,而每个二进制组合同时代表着一个十进制数字,所以每个...
  • Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16...
  • C语言的进制转换以及算法实现

    万次阅读 多人点赞 2021-01-20 18:45:28
    1.1、二进制转十进制 转换规程: 从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和,例如: 二进制 1011 = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 11 1.2、八制转十进制 转换...
  • 本文实例讲述了java实现的进制转换工具类。分享给大家供大家参考,具体如下:import java.nio.charset....* 例如十进制数57,在二进制写作111001,在16进制写作39。* 像java,c这样的语言为了区分十六进制和十进制...
  • 那么二进制,字节码这些会在哪里用到呢?自问自答:在跨平台的时候,就凸显神功了。比如说文件读写,数据通信,还有Java编译后的字节码文件。下面会有个数据通信的例子哦。Java对对象实现Serializabll...
  •  编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来。  输入格式:输入为一个字符串,每个字符都是’0’或’1’,字符串的长度不超过32。  输出格式:输出一个...
  • 今天一场技术笔试一道编程题难住了我,算出一个十进制数的二进制补码和对应的16进制,由于时间紧张,加上紧张,做的极差,因此mark以下
  • 二进制加法Java实现

    2021-02-12 22:57:33
    二进制整数的Java实现任意两个二进制数(不论在什么位置)相加,只可能出现4种情况。它们是:0+0=01+0=0+1=11+1=10=0+向高一位的进位11+1+1=11=1+向高一位的进位1//整数二进制相加public static String add(String b1,...
  • 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来。  输入格式:输入为一个字符串,每个字符都是’0’或’1’,字符串的长度不超过32。  输出格式:输出一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,309
精华内容 10,523
关键字:

十进制转二进制java算法数组

java 订阅