- 浏览: 1337664 次
- 性别:
- 来自: 湖南澧縣
文章分类
最新评论
-
虾米小尹:
不行啊!2.2-0.25=1.9500000000000002 ...
JavaScript浮点数运算 —— 精度问题 -
heluping000000:
引用String a= "abc",首先在 ...
String,到底创建了多少个对象? -
mack:
谢谢分享matcher.appendReplacement(s ...
string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement -
wzt3309:
完全理解,比网上其他资料都要详细
String,到底创建了多少个对象? -
u014771876:
Java中十六进制转换 Integer.toHexString()
为了显示一个byte型的单字节十六进制(两位十六进制表示)的编码,请使用:
Integer.toHexString((byteVar & 0x000000FF) | 0xFFFFFF00).substring(6)
byteVar & 0x000000FF的作用是,如果byteVar 是负数,则会清除前面24个零,正的byte整型不受影响。(...) | 0xFFFFFF00的作用是,如果byteVar 是正数,则置前24位为一,这样toHexString输出一个小于等于15的byte整型的十六进制时,倒数第二位为零且不会被丢弃,这样可以通过substring方法进行截取最后两位即可。
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正则表达式
2014-03-14 10:16 1763Java正则表达式详解 作者:jzj 文 ... -
类的初始化与清理
2013-06-24 22:20 1456初始化时内存清零 当创建一个对象时,首先将在堆上为这个对象分 ... -
protected,这个错了吗?
2013-06-24 22:17 1249这几天对protected修饰符有点迷糊,随便找同事要了一本 ... -
Java中BigDecimal的8种舍入模式
2013-06-21 18:42 2183java.math.BigDecimal不可变的、任意精度的 ... -
Tomcat性能参数设置
2010-12-27 15:35 34800默认参数不适合生产环境使用,因此需要修改一些参数 1、 ... -
Java 6 JVM参数选项大全
2010-12-14 11:16 1637http://kenwublog.com/docs/java6 ... -
对象的安全构造
2013-06-21 18:43 1544在构造期间,不要公布“this”引用 一种可以将数据争用引 ... -
Java断言(assert)—— 转
2010-06-20 10:36 12100一、概述 在C和C++语言中都有assert关键,表示断言。 ... -
eclipse调试
2010-06-04 00:11 8083eclipse远程调试 在eclipse3.4前,远程调试时 ... -
protected,你真的理解了吗?
2010-05-09 17:56 2147Java中的访问控制修饰符有四个级别,但属protected最 ... -
利用反射进行深层克隆
2010-05-05 21:02 3670最近在看《effective java ... -
类与类之间的几种关系
2010-05-03 13:49 2419类和类、类和接口、接 ... -
运行java
2010-05-03 13:47 1053用javac命令编译一个打包的类时,如果没有加参数" ... -
Java内存模型与volatile
2010-04-25 13:21 18786内存模型描述的是程序 ... -
中断线程
2010-04-24 21:19 8996中断线程 线程的thread.i ... -
java中的关键字、保留字、标示符
2010-04-07 23:48 3375关键字 Java的关键字对java的编译器有特殊的意义, ... -
Java中的浮点数剖析
2010-04-07 23:27 4720定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固 ... -
线程间的同步与互斥
2010-03-23 21:29 2305线程间的同步(实指线程间的通信):一般来说,一个线程相对于另 ... -
UTF-16、UTF-16BE、UTF-16LE编码方式的区别
2010-03-23 21:20 9818import java.io.IOException; ... -
final、finally、finalize
2010-01-22 01:15 2427final关键字 先看看final关键字,它可以被用于以下几个 ...
相关推荐
在编程领域,尤其是在Java语言中,进制转换是一项基本的操作,因为不同的进制系统在不同的场景下有不同的应用。CPU通常使用二进制处理数据,而人类更习惯于十进制,程序员尤其是底层开发者则常使用十六进制。八进制...
5. **十六进制转二进制**:先将十六进制转换为十进制,再转为二进制。例如: ```java String hex = "1A"; int decimal = Integer.parseInt(hex, 16); String binary = Integer.toBinaryString(decimal); ``` 6. **...
一、利用Integer将十进制的数进行进制转换 方法 十进制转换其他进制 使用方法 返回值 10进制转2进制 Integer.toBinaryString(n) 一个二进制字符串 10进制转8进制 Integer.toOctalString(n) 一个八进制字符...
4. **转换为十六进制**:利用`Integer.toHexString()`将生成的整数转换为十六进制字符串。 5. **拼接颜色代码**:将每个生成的十六进制字符拼接到颜色代码字符串中。 6. **输出结果**:最终输出以“#”开头的颜色...
在Java编程语言中,将十进制数转换为二进制、八进制和十六进制是常见的操作,尤其在处理计算机数据表示和计算时。本文将深入探讨这些转换方法。 首先,我们要理解不同进制系统的基础。十进制是我们日常生活最常用的...
在Java中,我们可以利用`Integer.parseInt()`方法将十六进制字符串转换为整数,再使用位运算符`^`来进行异或操作。首先,我们需要将输入的十六进制字符串按空格分隔,然后对每个分隔后的十六进制数进行异或运算。...
1. **二进制与十六进制转换** - 二进制是一种基于2的计数系统,只包含两个数字:0和1。 - 十六进制是一种基于16的计数系统,由0-9的阿拉伯数字和A-F的字母(代表10-15)组成。 - 在Java中,可以使用`Integer....
如果想要直接从二进制、八进制或十六进制转换为十进制,可以使用`Integer.parseInt(String s, int radix)`方法。 - **使用`parseInt`进行转换**: - 示例:`Integer.parseInt("0101", 2)` 返回 `5` (二进制0101转换...
十六进制转换可以使用`Integer.parseInt()`方法配合基数16,以及`toBinaryString()`、`toOctalString()`。例如,将十六进制数"7B"转换为二进制: ```java String hex = "7B"; int decimal = Integer.parseInt...
Java提供了多种方法来进行进制转换,其中一部分方法是在`java.lang.Integer`类中。 1. `Integer.toBinaryString(int i)`:将一个十进制整数转换为一个二进制的字符串表示形式。 2. `Integer.toOctalString(int i)`...
本文将深入探讨Java中如何进行进制转换,包括二进制、八进制、十进制和十六进制之间的转换。这对于任何对Java感兴趣或者正在学习Java的开发者来说都是必备的知识点。 首先,我们来看一下如何在Java中进行基本的进制...
在本文中,我们将讨论如何使用Java实现各进制转换,包括十进制到二进制、八进制和十六进制的转换。 在Java中,我们可以使用Integer类提供的方法来实现进制转换。Integer类提供了多种方法来将十进制数转换为其他进制...
在Java编程语言中,进制转换是常见的操作,特别是在处理数据表示、编码或者解析用户输入时。本篇文章将深入探讨Java中的进制转换方法,包括从十进制转换到其他进制,以及从其他进制转换回十进制。 1. **十进制转...
Java中的`Integer.toHexString(int i)`方法可以将一个十进制整型转换为十六进制字符串表示形式。该方法返回的是一个表示指定整数的无符号十六进制字符串。 例如: ```java int decimal = 253; String hex = ...
在Java编程语言中,将字符转换为十六进制表示的ASCII码是一项常见的任务,尤其是在处理字符串数据时。本文将深入探讨如何实现这个功能,并通过一个具体的示例代码`StringToAscii.java`进行演示。 首先,我们需要...
二进制转换通常通过`Integer.toBinaryString()`来实现,而十六进制转换则可使用`Integer.toHexString()`。 下面是一个简单的Java程序,演示了如何实现这个功能: ```java import java.util.Scanner; public class...
在十六进制转换中,需要注意的是,由于十六进制字符可能不是数字,所以需要特别处理。一旦`n`变为0,循环结束,最后打印出结果字符串`c`。 总结一下,这两个转换方法虽然简单,但对于初学者来说是非常基础且实用的...