十进制转二进制算法

这边我重新整理了十进制转二进制的算法,添加了幂算法,暂时是针对于无符号的整数。 这边我会一直更新算法,首先是无符号整数:代码如下

package masm.chapter1; public class DecimalToBinary { public static int LENGTH=32; //无符号的十进制转二进制(整数),默认为32位 //除法算法 public static int[] UnsignedDevision(int diciNum) { int[] binary=new int[32]; //定义一个结果集 int consult; //定义整数商 int remainder; //定义余数 int point = 31; for(int i=0; i<32; i++) { binary[i]=0; } consult=diciNum/2; binary[point–]=diciNum%2; while(consult!=0) { binary[point–]=consult%2; consult/=2; } return binary; } //幂指数算法 public static int[] UnsignedPower(int deciNum) { int[] binary = new int[32]; //定义结果集 int difference = deciNum; //定义差 int flag =0 ; //定义标记,如果2的n次幂小于差,flag为0,大于或等于差的则为1 for(int i = 0; i< 32; i++) { binary[i] = 0; } for(int i=0; i<LENGTH; i++) { if(difference>Math.pow(2,LENGTH-1-i)) { //System.out.println(“Difference is bigger than Math.pow(2,”+(LENGTH-1-i)+”),and difference is: “+difference); difference-=Math.pow(2,LENGTH-1-i); binary[i]=1; } else if(difference==Math.pow(2,LENGTH-1-i)) { //System.out.println(“Difference is equals Math.pow(2,”+(LENGTH-1-i)+”),and difference is: “+difference); binary[i]=1; return binary; } else { //System.out.println(“Difference is litter than Math.pow(2,”+(LENGTH-1-i)+”),and difference is: “+difference); //difference-=Math.pow(2,i); } } return binary; } //有符号的整数十进制转二进制,默认为32位 //无符号的浮点数十进制转二进制,默认为32位 //有符号的浮点数十进制转二进制,默认为32位 }

 

上面的争端代码末尾有一些注释,是针对于接下来要更新的有符号整数和无符号浮点数,有符号浮点数的算法。 这边,我打包在masm.chapter1上,如果同志们有需要,可以根据自己的需要修改一下便可。 下边为测试代码:

 package masm.test; import masm.chapter1.*; public class DecimalToBinaryTest { public static void main(String[] args) { //int[] result=DecimalToBinary.UnsignedDevision(10); int[] result=DecimalToBinary.UnsignedPower(256); for(int i=0; i<32 ;i++) { if(i%4==0) System.out.print(” “); System.out.print(result[i]); } } }

 

测试代码我打包在masm.test上,你们可以根据自己的需求在自己的机子上修改测试,交流一下。

  

测试结果:

 《十进制转二进制算法》

上面的测试值针对于无符号整数的十进制转二进制的幂指数算法,对于出发的算法在之前的博客中已经有测试过,上面难免有很多的不足,希望大家不吝赐教,或是算法的优化,或是更多的更好的算法。

 

 

==================================================================================

2011-01-20

 

实在抱歉,好久没有更新了,单单是这样放着也不行啊,这次整理加了一个负数的转二进制算法,这边用补码表示,这边的整个文件结构是这样的:《十进制转二进制算法》

这边将java文件编译成class文件的过程我不详细说明了,我们重点是代码的算法这边我只给出BinaryCompute.java和DecimalToBinary.java的源代码:

package masm.chapter1; /** * 二进制的计算应用 * BinaryCompute.java * 2011-1-18 * Saturday */ public class BinaryCompute { public static int LENGTH=32; //二进制的取非运算,这边的二进制我们使用整型数组表示,这边只是为了说明 //二进制转十进制的算法,对于算法的运行效率这边是暂时没有考虑 public static void getNot(int[] binary) { for(int i = 0; i< LENGTH; i++) binary[i]=1-binary[i]; } //二进制数加1 public static void increase(int[] binary) { int[] one={0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1}; add(binary,one); } //两个二进制数相加,只是相加完后的二进制数存放在binary中 public static void add(int[] binary, int[] binary1) { int sum=0; int carryNum=0;//进位标志 for(int i=LENGTH-1; i>=0; i–) { sum=binary[i]+binary1[i]+carryNum; //如果两个对应的二进制位相加数是2,那么我们就进位 if(sum==2) { carryNum=1; binary[i]=0; } //如果不是为2,就是没有进位,也就是carryNum==0,这时是需要重置的 else { binary[i]=sum; carryNum=0; } } } }

 

package masm.chapter1; /** *DecimalToBinary.java * 2011-1-20 * */ import masm.chapter1.BinaryCompute; public class DecimalToBinary { public static int LENGTH=32; //无符号的十进制转二进制(整数),默认为32位,十进制范围是0~2^32-1 //除法算法 public static int[] unsignedDevision(int deciNum) { int[] binary=new int[LENGTH]; //定义一个结果集 int consult; //定义整数商 int remainder; //定义余数 int point = 31; for(int i=0; i<LENGTH; i++) { binary[i]=0; } consult=deciNum/2; binary[point–]=deciNum%2; while(consult!=0) { binary[point–]=consult%2; consult/=2; } return binary; } //幂指数算法 public static int[] unsignedPower(int deciNum) { int[] binary = new int[LENGTH]; //定义结果集 int difference = deciNum; //定义差 int flag =0 ; //定义标记,如果2的n次幂小于差,flag为0,大于或等于差的则为1 for(int i = 0; i< LENGTH; i++) { binary[i] = 0; } for(int i=0; i<LENGTH; i++) { if(difference>Math.pow(2,LENGTH-1-i)) { //System.out.println(“Difference is bigger than Math.pow(2,”+(LENGTH-1-i)+”),and difference is: “+difference); difference-=Math.pow(2,LENGTH-1-i); binary[i]=1; } else if(difference==Math.pow(2,LENGTH-1-i)) { //System.out.println(“Difference is equals Math.pow(2,”+(LENGTH-1-i)+”),and difference is: “+difference); binary[i]=1; return binary; } else { //System.out.println(“Difference is litter than Math.pow(2,”+(LENGTH-1-i)+”),and difference is: “+difference); //difference-=Math.pow(2,i); } } return binary; } //有符号的整数十进制转二进制,默认为32位 //除法算法,参数是负数 public static int[] signedDevision(int deciNum) { int[] binary = new int[LENGTH]; if(deciNum>=0) { System.out.println(“你输入的十进制数不是负数!”); return unsignedDevision(deciNum); //如果是正数,直接用无符号的正数除法算法 } else { int strongDeciNum=-deciNum; //取deciNum正数 binary=unsignedDevision(strongDeciNum); //取得stongDeciNum的二进制值 BinaryCompute.getNot(binary); //二进制取反 BinaryCompute.increase(binary); //然后加1,这边没有考虑溢出的情况 } return binary; } //幂指数算法 public static int[] signedPower(int deciNum) { int[] binary = new int[LENGTH]; return binary; } //无符号的浮点数十进制转二进制,默认为32位 //有符号的浮点数十进制转二进制,默认为32位 }

    原文作者:进制转换
    原文地址: https://blog.csdn.net/qungxue/article/details/6083323
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞