黑马程序员技术交流社区
标题: 进制转换 [打印本页]
作者: 赵学刚 时间: 2012-11-26 15:31
标题: 进制转换
本帖最后由 赵学刚 于 2012-12-3 11:22 编辑
/*十六转二进制
* 思路:
* 1、让数据跟15做与运算,取到数据低四位然后转换成16进制
*
* 2、让运算 后的数据无符号右移4位再次跟15做与运算,如此
* 循环直到32为数据都结束
* 3、通过查表法转换,然后去除空格即可
*
*/
public class test5 {
public static void toHex(int num){
char[] arr=new char[]{'0','1','2','3','4','5','6','7','8','9'
,'A','B','C','D','E','F'};
char []ch=new char[8];
int pos=ch.length-1;
while(num!=0){
int temp=num&15;
ch[pos--] = arr[temp];
num=num>>>4;
}
//打印
for(int i=pos;i<ch.length;i++){
System.out.print(ch+',');
}
}
public static void main(String[] args) {
toHex(60);
}
}
为什么输出结果不对呢?
作者: 齐银春 时间: 2012-11-26 16:06
class ArrayTest
{
public static void main(String[] args)
{
// toHex(0);
toBinary(-6);
System.out.println(Integer.toBinaryString(-6));
// toOctal(60);
}
/*
十进制-->十六进制。
*/
public static void toHex(int num)
{
trans(num,15,4);
}
/*
十进制-->八进制。
*/
public static void toOctal(int num)
{
trans(num,7,3);
}
/*
十进制-->二进制。
*/
public static void toBinary(int num)
{
trans(num,1,1);
}
/*
进制转换功能。
*/
public static void trans(int num,int base,int offset)
{
if(num==0)
{
System.out.println("0");
return ;
}
//必须先将十六进制的元素进行存储。
char[] chs = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'};
//定义一个临时容器,用于存储查到的结果。
char[] arr = new char[32];
int pos = arr.length;
while(num!=0)
{
int temp = num & base;
// System.out.print(chs[temp]);
arr[--pos] = chs[temp];
num = num >>> offset;
}
// System.out.println("pos="+pos);
for(int x=pos; x<arr.length; x++)
{
System.out.print(arr[x]);
}
System.out.println();
}
}
楼主的代码错了
作者: 林剑 时间: 2012-11-26 16:15
public class Test5 {
public static void toHex(int num)
{
char[] arr={'0','1','2','3','4','5','6','7','8','9'
,'A','B','C','D','E','F'};//这里没有必要new一个新的数组
char []ch=new char[8];//定义一个容器用来存放转化后的数据
int pos=0;//容器角标,pos值应该是给定数的二进制形式除以4而不是length-1,这样太麻烦还不如初始化一个0,输出的时候反过来就可以了
while(num!=0)
{
int temp = num & 15;
ch[pos++] = arr[temp];
num = num>>>4;
}
//打印
for(int x=pos-1;x>=0;x--)
{
System.out.print(ch[x]);//输出的数据是存放在容器ch数组中的,而不是你定义的arr表中
}
}
public static void main(String[] args)
{
toHex(60);
}
}
作者: 赵学刚 时间: 2012-12-3 00:18
问题自己解决了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |