`

Java 进制转换

    博客分类:
  • Java
阅读更多
10进制转16进制 10转2进制

package com.jiaozg.test;

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));//15  
       
        System.out.println(Integer.toBinaryString(10)); //1010
        System.out.println(Integer.toHexString(10));    //a
    }  
  
    /* 
     * 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  8进制
        System.out.println(10);//10  10进制
        System.out.println(0x10);//16 16进制
    }  
  
    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 进制转换工具类 java 进制转换工具类

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

    java进制转换工具类

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

    Java进制转换实现

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

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

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

    JAVA 进制转换工具V1.0

    **JAVA 进制转换工具V1.0** 在计算机科学中,进制转换是一项基本而重要的概念,它涉及将一个数值从一种数制转换到另一种数制。此JAVA开发的进制转换工具V1.0提供了便捷的方式,帮助用户进行二进制、八进制、十进制...

    java 进制转换

    ### Java 进制转换知识点详解 #### 一、概述 在计算机科学中,不同进制之间的转换是一项基本技能。Java 提供了一系列内置方法来帮助开发者实现不同进制间的转换,如二进制(base-2)、八进制(base-8)、十进制...

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

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

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

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

    java进制转换器

    设计一个java程序。输入一个十进制数转,将其换成二进制、八进制和十六进制。

    Java进制转换方法整理

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

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

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

    java进制转换大全

    在Java编程语言中,进制转换是处理数字和字符串数据时的一个常见需求。无论是将十进制数转换为二进制、八进制或十六进制,还是反之,Java提供了丰富的API来支持这些操作。本文将详细介绍Java中进行进制转换的各种...

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

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

    java进制转换[归纳].pdf

    Java进制转换是编程中的基础概念,特别是在软件开发中,理解和掌握不同进制之间的转换至关重要。这个PDF文档可能是一个简单的Java程序示例,用于演示如何将一个任意进制的数转换为其他进制。让我们详细解析一下这个...

    JAVA实用进制转换

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

    java实现各进制之间转换

    Java还提供了`Format`类和`DecimalFormat`类,可以用于更复杂的进制转换。例如,你可以创建一个格式对象,指定源和目标进制,然后进行转换。 6. **位运算符辅助转换** 除了上述方法,还可以利用位运算符进行进制...

    JAVA 进制转换全攻略.docx

    本篇文章将深入探讨Java中的进制转换方法,包括从十进制转换到其他进制,以及从其他进制转换回十进制。 1. **十进制转十六进制**: 使用`Integer.toHexString(int i)`方法可以将一个十进制整数转换为十六进制字符...

Global site tag (gtag.js) - Google Analytics