Java基础:十进制转换其他进制

平时使用中,进制转换只要使用Integer这个包装类中的方法即可完成。

但其实我们也能用自己的方法去实现,这有助于初学者对于计算机底层运算的理解。下面例子使用了查表形式的方法来完成的进制的转换。

在开始前,需要先理解清楚各个进制的特点还有位的概念。

众所周知,在计算机中,内存保存的都是二进制的数据,即通过0,1来表示数据的内容。

位(bit)就是代表二进制数据个中的每一个0或1,bit是计算机中的最小单位。

需要注意的是计算机基本存储单位是字节(byte),它用8个二进制位表示,即1 byte = 8 bit。

java可以支持八进制,十进制,十六进制的表示,分别是:

八进制:前置0,如用八进制表示5要写成05。

十进制:不需前置,如5就是十进制中的5.

十六进制:前置0x或者0X,如用十六进制表示5要写成0x5。

如果生成值为60的int类型的数据,它在内存会占用32位的空间。如下所示:

0000-0000 0000-0000 0000-0000 0011-1100

十六进制的数值用0~9和A~F这16个数来表示,当满足16,则进位。60在java中用十六进制来表示为:0x3C,在内存中表现为:

八进制的数值用0~7这8个数来表示,当满足8,则进位。60在java中用八进制来表示为:074,在内存中表现为:

从以上规律可以看出,二进制中每4个位(2的4次幂=16),就表示十六进制中1个位,而要得出16进制位上的数值,可以使用位运算 & 15(二进制数1111)得出。

同理,二进制中每3个位(2的3次幂=8),就表示八进制中1个位,而要得出8进制位上的数值,可以使用位运算 & 7(二进制数111)得出。

基于以上的分析,可以设计一下代码:

 1 class Transform
 2 {
 3     public static void main(String[] args)
 4     {
 5         toHex(60);
 6         toba(60);
 7         toBin(60);
 8     }
 9
10 //十进制转二进制
11     public static void toBin (int num)
12     {
13         trans(num,1,1);
14     }
15
16 //十进制转八进制
17     public static void toba (int num)
18     {
19         trans(num,7,3);
20     }
21
22 //十进制转十六进制
23     public static void toHex (int num)
24     {
25         trans(num,15,4);
26     }
27
28 //    具体转换过程。
29 //    方法中第一个参数为需要转换的数 ,第二参数为位运算&上的数,第三个参数为要移动的二进制位。
30     public static void trans (int num,int base,int offset)
31     {
32 //        定义一个数组,角标对应数值,可以看做一个查询表。
33         char[] chs = {‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘};
34         char[] arr = new char[32];
35         int pos = arr.length;
36
37         if(num==0)
38         {
39 //            如果要转换的数为0,则无需转换。
40             System.out.println(0);
41         }
42
43         while(num!=0)
44         {
45 //            得出指定进制中每一位的数值,存入一个数组中。
46             int temp = num & base;
47             arr[--pos] = chs[temp];
48 //            每得出一个指定进制一个位上的值后,原数值的二进制位就往右移动指定位数,并在前面补零。
49             num = num >>> offset;      //移位补零。
50         }
51
52         for(int x=pos;x<arr.length;x++)
53         {
54             if (x==(arr.length-1)) {
55                 System.out.println(arr[x]);
56             } else {
57                 System.out.print(arr[x]);
58             }
59         }
60     }
61 }
时间: 2024-11-06 03:30:53

Java基础:十进制转换其他进制的相关文章

最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类

前言:用于处理Java基本数据的转换及进制转换操作工具 一.实现功能 1.int预byte互转 2.int与byte[]互转 3.short与byte互转 4.short与byte[]互转 5.16位short与byte[]互转 6.long预byte[]互转 7.byte[]与inputstream互转 8.byte与String互转 9.16进制字符转int 10.十进制转2进制 11.byte[]转16进制字符 12.byte[]数组指定位置抽取byte[] 二.代码实现 package

java基础第二天_进制转换原理和补码存储方式

1.负数的表现形式,为什么如此设计? 负数的表现形式是正数取反加一.原理是正负数相加值为0.如此设计正负值相加时首位的1由于超出表示范围会溢出.得到符合补码表示法的正确数值. 比如byte类型的二进制表示的数,1000 0001 + 0111 1111 = (byte类型是8位,第9位是1超过范围)1 0000 0000,所以取前面8位,0000 0000,值就为0了. -------------------------------------------------- 2.-128是在内存中是

java基础:快速的进制转化法

1:8421码是中国大陆的叫法 8421码是BCD代码中最常用的一种. 在这种编码方式中每一位二值代码的1都是代表一个固定数值, 把每一位的1代表的十进制数加起来,得到的结果就是它所代表的十进制数码.

java程序练习:x进制转Y进制

/*X进制到Y进制转换*/ /*Step1.提示用户输入数据的进制X *Step2.接收用户输入的数据,保存到X * Scanner方法 *Step3.接收用户输入X进制的数据,保存到num *Step4.提示用户输入输出数据的进制Y *Step5.接收用户输入的数据,保存到Y * Scanner方法 *Step6.十进制=每一位上的(系数*X^权次幂)相加,保存到a * X进制转换十进制 *Step7.Y进制=a/Y,取余数,直到商为零,余数反转,保存到b * 十进制转换Y进制 *Step8.

Java基础知识强化106:Java中如何实现十进制到其他进制的转换

下面是示例代码,我们直接通过JDK工具库中的方法实现的,如下: 1 package com.himi.radix; 2 3 4 /** 5 * Java中如何实现十进制到其他进制的转换 6 * @author hebao 7 * 8 */ 9 public class IntegerToOther { 10 11 public static void main(String[] args) { 12 int n = 14; 13 //十进制转成十六进制: 14 String n0 = Integ

java 16进制转换10进制

public static String toHexString2(byte[] b) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < b.length; ++i) { buffer.append(toHexString2(b[i])); } return buffer.toString(); } public static String toHexString2(byte b) { char[] buffer =

python常用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)

进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上,直接上例子 整数之间的进制转换: 10进制转16进制: hex(16)  ==>  0x10 16进制转10进制: int('0x10', 16)  ==>  16 类似的还有oct(), bin() ------------------- 字符串转整数: 10进制字符串: int('10')  ==>  10 16进制字符串: int('10', 16)  ==>  16 16进

java 13-4 Integer和String、int之间的转换,进制转换

1.int类型和String类型的相互转换 A.int -- String 推荐用: public static String valueOf(int i) 返回 int 参数的字符串表示形式. B.String -- int 推荐用: public static int parseInt(String s) 将字符串参数作为有符号的十进制整数进行解析 1 public class IntegerDemo { 2 public static void main(String[] args) {

python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)

进行协议解析时.总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上.直接上样例 整数之间的进制转换: 10进制转16进制: hex(16)  ==>  0x10 16进制转10进制: int('0x10', 16)  ==>  16 类似的还有oct(), bin() ------------------- 字符串转整数: 10进制字符串: int('10')  ==>  10 16进制字符串: int('10', 16)  ==>  16 16进