`
mr_lonely_hp
  • 浏览: 91363 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

java进制之间转换

阅读更多
2进制CPU使用,8进制很少见,10进制适合人类使用,16进制适合编译器和底层程序员使用,希望对你有所帮助!

public class Sun1 {
public static void main(String[] args) {
  System.out.println(Integer.toHexString(20)); //十进制转成十六进制
  System.out.println(Integer.toBinaryString(20));//十进制转成二进制
  System.out.println(Integer.toOctalString(20));//十进制转成八进制
  System.out.println(Integer.valueOf("FFFF",16).toString());//十六进制转成十进制
  System.out.println(Integer.valueOf("5",8).toString());//八进制转成十进制
  System.out.println(Integer.valueOf("0101", 2).toString());//二进制转十进制
}
}

由于Unicode兼容ASCII(0~255),因此,上面得到的Unicode就是ASCII。
至于转换成二进制或其他进制,Java API提供了方便函数,你可以查Java的API手册。 以字符a的ASCII为例:
int i = 'a';
String iBin = Integer.toBinaryString(i);//二进制
String iHex = Integer.toHexString(i);//十六进制String iOct = Integer.toOctalString(i);//八进制
String iWoKao = Integer.toString(i,3);//三进制或任何你想要的35进制以下的进制
DEC[集]java中进行二进制,八进制,十六进制,十进制间进行相互转换
十进制转成十六进制:
Integer.toHexString(int i)十进制转成八进制
Integer.toOctalString(int i)
十进制转成二进制
Integer.toBinaryString(int i)
十六进制转成十进制
Integer.valueOf("FFFF",16).toString()
八进制转成十进制
Integer.valueOf("876",8).toString()
二进制转十进制
Integer.valueOf("0101",2).toString()









为了显示一个byte型的单字节十六进制(两位十六进制表示)的编码,请使用:
Integer.toHexString((byteVar & 0x000000FF) | 0xFFFFFF00).substring(6)
byteVar & 0x000000FF的作用是,如果byteVar 是负数,则会清除前面24个零,正的byte整型不受影响。(...) | 0xFFFFFF00的作用是,如果byteVar 是正数,则置前24位为一,这样toHexString输出一个小于等于15的byte整型的十六进制时,倒数第二位为零且不会被丢弃,这样可以通过 substring方法进行截取最后两位即可。

Java code

import junit.framework.TestCase; 
 
public class Hex extends TestCase { 
 
    public void testPositiveIntToHex() { 
        //如果正数小于15时,只输入一位,而不是按我们想像的两位标准十六进制输出显示的,后面解决这个问题 
        System.out.println(Integer.toHexString(2));//2 
        System.out.println(Integer.toHexString(15));//f 
        System.out.println(Integer.toHexString(16));//10 
        System.out.println(Integer.valueOf("F", 16));//16 
    } 
 
    /*
     * Integer.valueOf()实质上调用的是Integer.parseInt()来完成的,所以
     * Integer.parseInt()与Integer.valueOf()功能是一样的,只是返回值不
     * 一样而已
     */ 
    public void testNegativeIntToHex() { 
        //负整数时,前面输入了多余的 FF ,没有去掉前面多余的 FF,按并双字节形式输出 
        System.out.println(Integer.toHexString(-2).toUpperCase());//FFFFFFFE 
 
        //实质上0xFF会像转换成0x000000FF后再进行位运算 
        System.out.println(Integer.toHexString(-2 & 0xFF).toUpperCase());//FE 
        System.out.println(Integer.toHexString(-2 & 0x000000FF).toUpperCase());//FE 
 
        //注,FE输出时不会为-2,因为此时不会把FE看成负数,valueOf会把所有数字串看成正的 
        System.out.println(Integer.valueOf("FE", 16));//254 
        //如果要输出-2,只能按以下形式输出 
        System.out.println(Integer.valueOf("-2", 16));//-2 
 
        //所以要把 FE 看成负的话,只能在前面加上负号,但是这里输出还不是-2, 
        //而是先计算Integer.valueOf("FE", 16),再在结果前加上负 
        System.out.println(Integer.valueOf("-FE", 16));//-254 
 
        /* 所以如果要输入某个负数,我们只能先求出该数的绝对值的原码十六进制,再在前面加上负号,
         * 例如求表示-128,则先对绝对值128求十六进制 80,再在前面加上负号 -80
         */ 
        System.out.println(Integer.valueOf("-80", 16));//-128 
 
        /* 为什么说valueOf把所有数字串看成正的呢?请看下面三行代码,因为最大正数为2147483647,
         * 如果再  在7fffffff基础上加上一个一,运行肯定会出错误(这与直接输出0x80000000不一样),
         * 那么就可以证明
         */ 
        System.out.println(Integer.valueOf("7fffffff", 16));//2147483647 
        //此句运行时会报错,因为最大正数为7fffffff,但如 -80000000 却又可以运行,因为没超出整数范围 
        //System.out.println(Integer.valueOf("80000000", 16));//不能运行,已注掉 
        System.out.println(Integer.valueOf("-80000000", 16));//-2147483648 
 
        /* 注,输出时不是负数,而是正,因为0xFE只有8位,而整数是32位,所以以int形式出现时前
         * 面会自动补24个零,第一位是零,所以最后是正数
         */ 
        System.out.println(0xFE);//254 
        System.out.println(-0xFE);//-254 
        //但0x80000000已满,无需补,第一位为一,所以最后为负数 
        System.out.println(0x80000000);//-2147483648 
    } 
 
    public void testNegativeIntToBin() { 
        System.out.println(Integer.toBinaryString(-2));//11111111111111111111111111111110 
        //实质上0xFF会像转换成0x000000FF后再进行位运算 
        System.out.println(Integer.toBinaryString(-2 & 0xFF));//11111110 
        System.out.println(Integer.toBinaryString(-2 & 0x000000FF));//11111110 
 
        //与上面十六进制是一样的 
        System.out.println(Integer.valueOf("1111111111111111111111111111111", 2));//2147483647 
        //下面语句运行会出错,已注掉 
        //System.out.println(Integer.valueOf("10000000000000000000000000000000", 2)); 
        System.out.println(Integer.valueOf("-10000000000000000000000000000000", 2));//-2147483648 
        System.out.println(Integer.valueOf("11111110", 2));//254 
        System.out.println(Integer.valueOf("-11111110", 2));//-254 
 
        /* 注,Java中没有直接使用二进制表示一个数(目前只支持八与十六进制直接表示法),下面其实是一个
         * 八进制的数与十进制的数
         */ 
        System.out.println(010);//8 
        System.out.println(10);//10 
    } 
 
    public void testByteToHex() { 
 
        byte negativeByte = -2; 
        byte positiveByte = 2; 
 
        /* toHexString方法类型为int型,所以转Hex前参数会提升成整型后再进行转换,过程如下:
         * 10000010(原码)->11111110(补码)->11111111 11111111 11111111 11111110(提升)
         * ->FFFFFFFE(转Hex进制输出)
         */ 
        System.out.println(Integer.toHexString(negativeByte).toUpperCase());// FFFFFFFE 
 
        /* 第一步把-2转成整型:
         * 10000010(原码)->11111110(补码)->11111111 11111111 11111111 11111110(转整型)
         * 第二步把 0xFF 前补24个零:
         * 00000000 00000000 00000000 11111111
         * 第三步:把第一二步结果进行与位运算:
         * 00000000 00000000 00000000 11111110
         * 最后一步:转十六进制结果为 FE 
         */ 
        System.out.println(Integer.toHexString(negativeByte & 0xFF).toUpperCase());// FE         
 
        //另一种转换,可以针对负数与正数的byte都可以以完整的单字节输出 
        System.out.println(Integer.toHexString((negativeByte & 0x000000ff) | 0xffffff00) 
                .substring(6).toUpperCase());//FE 
        System.out.println(Integer.toHexString((positiveByte & 0x000000ff) | 0xffffff00) 
                .substring(6).toUpperCase());//02 
    } 
 
    /**
     * 位运算与算术运行中的类型提升机制是一样的
     */ 
    public void testBiteMathematical() { 
        System.out.println(0x8000000000000000L);//-9223372036854775808 
        System.out.println((int) 0x8000000000000000L);//0 
        System.out.println(0x8000000000000010L);//-9223372036854775792 
        System.out.println(0x80000000);//-2147483648  
        System.out.println(0x80000010);//-2147483632  
 
        //0x00000010提升成长整型,最后结果为长整型0x8000000000000010L 
        System.out.println(0x00000010 | 0x8000000000000000L);//-9223372036854775792 
        //0x0010提升成整形,最后结果为整型0x80000010 
        System.out.println(0x0010 | 0x80000000);//-2147483632  
    } 
}

分享到:
评论

相关推荐

    Java SE程序 进制之间的转换

    Java SE程序 进制之间的转换Java SE程序 进制之间的转换Java SE程序 进制之间的转换Java SE程序 进制之间的转换Java SE程序 进制之间的转换Java SE程序 进制之间的转换Java SE程序 进制之间的转换Java SE程序 进制...

    java 进制转换工具类 java 进制转换工具类

    java 进制转换工具类 java 进制转换工具类java 进制转换工具类 java 进制转换工具类java 进制转换工具类 java 进制转换工具类

    java实现各进制之间转换

    除了上述方法,还可以利用位运算符进行进制转换,特别是二进制与十进制之间的转换。例如,通过位右移和位与操作可以手动实现二进制转十进制。 总的来说,Java提供了多种方法来处理不同进制之间的转换,无论是基础...

    java进制转换工具类

    二进制数组转换为二进制字符串 将二进制数组转换为十六进制字符串 将十六进制转换为二进制字节数组 将十六进制转换为二进制字符串

    Java实现的进制转换工具类完整示例

    Java实现的进制转换工具类是Java语言中的一种常用工具类,用于实现各种进制之间的转换操作,如二进制、十六进制、字符串、数组等。该工具类主要提供了将字节数组转换为十六进制字符数组或字符串的方法,以及将字符串...

    Java进制转换实现

    运行这段代码,你会看到不同的进制转换结果,从而加深对Java进制转换的理解。 在实际开发中,进制转换被广泛应用于数据编码、网络通信、内存表示等方面。例如,在网络编程中,IP地址通常以点分十进制形式表示,但在...

    JAVA 进制转换工具V1.0

    此JAVA开发的进制转换工具V1.0提供了便捷的方式,帮助用户进行二进制、八进制、十进制和十六进制之间的相互转换。对于编程人员和学习计算机科学的人来说,这种工具具有很高的实用价值。 在Java语言中,进制转换主要...

    Java进制转换,十六进制、十进制、二进制

    Java进制转换 正整数的十进制转换二进制 将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取除得的余数,即换算为二进制数的结果。只需记住要点:除二取余,倒序排列。 由于计算机...

    java编写的进制转换器(带图形界面)

    一个用java写的进制转换器,有图形界面。 主要是调用java的lang类进行转换。

    java中进制转换(二进制,十进制,十六进制)及字节数组与十六进制的转换

    在Java编程中,进制转换是一项基础且重要的技能,尤其在处理数据传输、网络通信(如蓝牙通信)或者低级别数据处理时。本篇将详细阐述如何在Java中进行二进制、十进制和十六进制之间的转换,以及字节数组与十六进制...

    Java进制转换方法整理

    一、利用Integer将十进制的数进行进制转换 方法 十进制转换其他进制 使用方法 返回值 10进制转2进制 Integer.toBinaryString(n) 一个二进制字符串 10进制转8进制 Integer.toOctalString(n) 一个八进制字符...

    java 将文件中二进制文件转换成文本文本文件并输出

    在Java编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、视频或纯文本,但以非可读格式存储。而文本文档通常使用特定的字符编码(如ASCII...

    java 进制转换,二进制 十进制 十六进制 正数 负数的进制等等!.docx

    在编程领域,尤其是在Java语言中,进制转换是一项基本的操作,因为不同的进制系统在不同的场景下有不同的应用。CPU通常使用二进制处理数据,而人类更习惯于十进制,程序员尤其是底层开发者则常使用十六进制。八进制...

    JAVA实用进制转换

    在Java编程语言中,进制转换是常见的操作,特别是在处理数据表示、编码或者解析用户输入时。Java提供了内置的方法来方便地在不同进制之间进行转换,主要包括十进制、二进制、八进制和十六进制。下面将详细阐述这些...

    java 26进制转换

    在Java编程语言中,26进制转换是一种特殊形式的编码,它不是标准的计算机科学概念,但在某些特定场景下可能会被用到。通常,我们谈论的进制转换包括二进制、八进制、十进制和十六进制之间的转换。然而,"26进制"通常...

    java 各种进制的转换

    此外,文件名中的 `TextZhuanhuan.java` 暗示可能有一个类或方法实现了进制转换的功能,而 `Java.jpg` 则可能是用来辅助理解进制转换概念的图像。 总结来说,Java提供了丰富的内置函数来支持各种进制间的转换,无论...

    Java进制转换器窗体设计(一)

    本程展示如何使用Java中Swing程序来设计进制转换器,实现十进制到二进制,八进制,十六进制的转换。

    Java进制之间的转换

    在Java编程语言中,进制转换是常见的操作,特别是在处理数据表示、编码或者解析用户输入时。本篇文章将深入探讨如何在Java中进行二进制、八进制、十六进制以及十进制之间的转换。 首先,对于字符与ASCII码或Unicode...

    数字各种进制的转换

    本文详细介绍了数字进制转换的基本原理,并通过具体的Java代码示例实现了任意进制之间的转换。通过对非十进制到十进制以及十进制到非十进制的转换过程进行分析,可以帮助读者更好地理解和掌握进制转换的核心算法。在...

Global site tag (gtag.js) - Google Analytics