十进制转换二、八、十六进制
2016-05-24 11:58
190 查看
上一篇博客写到了十进制转十六进制的方法,主要思路是与运算后右移,得到要转换进制数的每一位数,然后存在一个临时数组中,再输出。其实十进制转八进制和二进制的方法大同小异,因此写一个类将这些功能整合在一起。
class Transform { /* 思路:二进制,八进制,十六进制的元素个数固定,而且还有对应编号,可以用查表法. 一个int类型十进制数在32位操作系统中占4个字节,32位2进制数,取它的低8位,例如60,在内存中以二进制数0011 1100存放, 而一个二进制数中每一位数对应二进制中1位数,一个八进制数中每一位数对应二进制中3位数,一个十六进制数中 每一位数对应二进制中4位数,因此可以将十进制数与对应要转换进制数的基数base(如二进制offset占1位,base为1; 八进制offset占三位,base为111;16进制offset占四位,base为1111;)进行“与(&)”运算,得出最低位, 然后左移偏移量offset继续与运算,直到原数等于0,得出所有位数,然后存在一个临时数组中,逆置输出 */ /* 十进制-->二进制 十进制数在内存中是以二进制形式存放的,因此与1与运算后, 右移1位继续做与运算,直到原数为0. */ public static String toBinary(int num) { return trans(num,1,1); } /* 十进制-->八进制 内存中,一位八进制数等于三位二进制数,因此与7与运算后, 右移3位继续做与运算,直到原书为0. */ public static String toOctal(int num) { return "0"+trans(num,7,3); } /* 十进制-->十六进制 内存中,一位十六进制数等于四位二进制数,因此与15与运算后, 右移4位继续做与运算,直到原书为0. */ public static String toHex(int num) { return "0x"+trans(num,15,4); } //用于进制转换的功能 public static String trans(int num,int base,int offset) { //1.建表 char[] chs={'0','1','2','3', '4','5','6','7', '8','9','A','B', 'C','D','E','F'}; //2.创建存储2进制数的32位数的临时容器 char[] arr = new char[32]; //3.创建操作容器中每一位数的下标 int index =arr.length; //4.通过循环对num进行&base,>>>offset操作,直到原数为0 while(num!=0) { //5.对num进行&运算得最低位数 int temp = num & base; //6.根据&运算后的结果,作为下标,查表获取对应的字符,将它存储在临时容器中 //因为先求的是最低位,顺序是逆的,因此存储时逆存储 arr[--index] = chs[temp]; //7.对num进行右移,求次低位数 num = num >>>offset; } //8.调用方法,将数组转换成字符串输出 return toString(arr,index); } //9.定义一个方法,将数组转换成字符串 public static String toString(char[] arr,int index) { String temp = ""; for(int x=index;x<arr.length;x++) { temp = temp + arr[x]; } return temp; } public static void main(String[] args) { int num = 60; String str_bin = toBinary(num); String str_oct = toOctal(num); String str_hex = toHex(num); System.out.println(str_bin); System.out.println(str_oct); System.out.println(str_hex); } }
相关文章推荐
- DataGridView修改HeaderText
- 富客户端 wpf, Winform 多线程更新UI控件
- linux里用cmake安装的软件要怎么卸载?
- TCP 和UDP 的区别
- ViewPage左右滑动和PullToRefreshListView上下滑动事件冲突
- KeyBoard 篇
- nyoj 773 开方数
- RabbitMQ .NET Client 实战实验
- 网页的favicon.ico不显示问题
- 利用vertical-align:middle实现行内元素的水平垂直居中对齐
- 混淆模板
- Git:代码冲突常见解决方法
- Gulp那些好用的插件 2016.04.20
- jdbcTemplate SQL in
- 如何在ListCtrl中显示不同的图片
- Spark Streaming之Executor容错安全性
- Linux数据库:MYSQL启用和查看二进制日志
- 大数据第六天作业
- Android性能优化1
- 销售订单屏幕增强及功能增强