java二进制、八进制、十六进制间转换详细
转载自:http://blog.csdn.net/u010137760/article/details/52610442
1.各进制表示
java里不能使用前置表示2进制,只能是 8,10,16进制
8: 前置 0
10: 不需前置
16: 前置 0x 或者 0X
public class test {public static void main(String[] args) {int octalB = 012;int hexB = 0x12;System.out.println(octalB);System.out.println(hexB);}
}
输出结果
8进制012->10进制10
16进制0x12->10进制18
2.转换-Integer.toBinaryString
测试代码
public class test {public static void main(String[] args) {//8进制、10进制、16进制转为2进制System.out.println("Integer.toBinaryString(01)="+Integer.toBinaryString(01));System.out.println("Integer.toBinaryString(012)="+Integer.toBinaryString(012));System.out.println("Integer.toBinaryString(10)="+Integer.toBinaryString(10));System.out.println("Integer.toBinaryString(0xa)="+Integer.toBinaryString(0xa));System.out.println("Integer.toOctalString(0x12)="+Integer.toOctalString(0x12));System.out.println("Integer.toOctalString(18)="+Integer.toOctalString(18));System.out.println("Integer.toHexString(012)="+Integer.toHexString(012));System.out.println("Integer.toHexString(10)="+Integer.toHexString(10));}
}
测试结果
Integer.toBinaryString(01)=1
Integer.toBinaryString(012)=1010
Integer.toBinaryString(10)=1010
Integer.toBinaryString(0xa)=1010
Integer.toOctalString(0x12)=22
Integer.toOctalString(18)=22
Integer.toHexString(012)=a
Integer.toHexString(10)=a
源码
toBinaryString、toOctalString、toHexString都类似,则以toBinaryString为例讲解
Integer.java
/*** Converts the specified integer into its binary string representation. * 将指定的整型转换为二进制表示* The returned string is a concatenation of '0' and '1' characters.* 返回的字符串是以'0'、'1'连接的* @param i the integer to convert.要转换的整型值* @return the binary string representation of {@code i}.* 返回的二进制字符串*/
public static String toBinaryString(int i) {return IntegralToString.intToBinaryString(i);
}
IntegralToString.java
/*** The digits for every supported radix.*/
private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't','u', 'v', 'w', 'x', 'y', 'z'
};public static String intToBinaryString(int i) {int bufLen = 32; // 整型是4个字节32位char[] buf = new char[bufLen];int cursor = bufLen;do {buf[--cursor] = DIGITS[i & 1];} while ((i >>>= 1) != 0);return new String(cursor, bufLen - cursor, buf);
}
运行过程
当i=1时i = 1, cursor = 32doi&1=1,buf[31] = DIGITS[1] = 1whilei = 1>>>1 = 0,i == 0终止00000000 00000000 00000000 00000001----------------------------------------- 当i=2时i = 2(10), cursor = 32doi&1=0,buf[31] = DIGITS[0] = 0whilei = 2>>>1 = 1,i != 0成立doi&1=1,buf[30] = DIGITS[1] = 1whilei = 1>>>1 = 0,i == 0终止00000000 00000000 00000000 00000010
3.转换-Integer.valueOf
测试代码
public class test {public static void main(String[] args) {//十六进制转成十进制System.out.println(Integer.valueOf("FFFF",16));System.out.println(Integer.valueOf("-FFFF",16));//八进制转成十进制System.out.println(Integer.valueOf("776",8));System.out.println(Integer.valueOf("-776",8));//二进制转十进制System.out.println(Integer.valueOf("0101",2));System.out.println(Integer.valueOf("-0101",2));}
}
测试结果
65535
-65535
510
-510
5
-5
源码
Integer.java
方法:valueOf
/*** Parses the specified string as a signed integer value using the specified radix.* 将制定的字符串转换为有符号的整数,参考指定的基数* @param string the string representation of an integer value.* 字符串表示的整型值* @param radix the radix to use when parsing.* 转换时指定基数,比如2代表2进制,8代表8进制,16代表16进制* @return an {@code Integer} instance containing the integer value* represented by {@code string} using {@code radix}.* 整形值被转换为指定的基数的字符串* @throws NumberFormatException* if {@code string} cannot be parsed as an integer value, or* {@code radix < Character.MIN_RADIX ||* radix > Character.MAX_RADIX}.* string不是整形值;radix< Character.MIN_RADIX或radix > Character.MAX_RADIX都会报转换异常* @see #parseInt(String, int)*/public static Integer valueOf(String string, int radix) throws NumberFormatException {return valueOf(parseInt(string, radix));}
方法:parseInt
/*** The minimum radix used for conversions between characters and integers.*/
public static final int MIN_RADIX = 2;/*** The maximum radix used for conversions between characters(字符) and integers.(整型)*/
public static final int MAX_RADIX = 36;/*** Parses the specified string as a signed integer value using the specified radix. * The ASCII characters \u002d ('-') and \u002b ('+') are recognized as the minus and plus signs.* ASCII字符"-"和"+"被作为正负号*/public static int parseInt(String string, int radix) throws NumberFormatException {if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) {throw new NumberFormatException("Invalid radix: " + radix);}if (string == null || string.isEmpty()) {throw invalidInt(string);//返回的是一个NumberFormatException异常}char firstChar = string.charAt(0);//如果字符串以'-'或'+'开头,则firstDigitIndex = 1作为后续操作的标识int firstDigitIndex = (firstChar == '-' || firstChar == '+') ? 1 : 0;//字符串只有'-'或'+'抛异常if (firstDigitIndex == string.length()) {throw invalidInt(string);}return parse(string, firstDigitIndex, radix, firstChar == '-');}
方法:parse
/*** Constant for the minimum {@code int} value, -2<sup>31</sup>.*/
public static final int MIN_VALUE = 0x80000000;
private static int parse(String string, int offset, int radix, boolean negative) throws NumberFormatException {int max = Integer.MIN_VALUE / radix;int result = 0;int length = string.length();while (offset < length) {int digit = Character.digit(string.charAt(offset++), radix);if (digit == -1) {throw invalidInt(string);}if (max > result) {throw invalidInt(string);}int next = result * radix - digit;if (next > result) {throw invalidInt(string);}result = next;}//negative以'-'开头则为trueif (!negative) {//以'+'开头result = -result;if (result < 0) {throw invalidInt(string);}}return result;
}
Character.java
方法:digit
public static int digit(char c, int radix) {return digit((int) c, radix);
}/*** Convenience method to determine the value of the character* {@code codePoint} in the supplied radix. The value of {@code radix} must* be between MIN_RADIX and MAX_RADIX.* 基于radix来确定codePoint指定的字符,radix必须在MIN_RADIX与MAX_RADIX之间* @param codePoint the character, including supplementary characters.* @return if {@code radix} lies between {@link #MIN_RADIX} and* {@link #MAX_RADIX} then the value of the character in the radix;* -1 otherwise.*/
public static int digit(int codePoint, int radix) {//1,2//在最大与最小之间,否则返回-1if (radix < MIN_RADIX || radix > MAX_RADIX) {return -1;}if (codePoint < 128) {// Optimized for ASCIIint result = -1;if ('0' <= codePoint && codePoint <= '9') {result = codePoint - '0';} else if ('a' <= codePoint && codePoint <= 'z') {result = 10 + (codePoint - 'a');} else if ('A' <= codePoint && codePoint <= 'Z') {result = 10 + (codePoint - 'A');}return result < radix ? result : -1;}//当前类的native方法return digitImpl(codePoint, radix);
}private static native int digitImpl(int codePoint, int radix);
运行过程
Integer.valueOf("11",2)//string, radix
parseInt("11", 2)//string, radix
parse("11",0,2,false)//string, offset, radix, negative
while(offset < string.length){0 < 2成立拿二进制的第1位1(从左到右)Character.digit('1',2)//string.charAt(offset++), radixCharacter.digit(49,2),return 1//(int) c, radixdigit('1',2),return 1next = 0*2-1=-1//result * radix - digitresult = -1拿二进制的第2位1(从左到右) Character.digit('1',2)//string.charAt(offset++), radixCharacter.digit(49,2),return 1//(int) c, radixdigit('1',2),return 1next = -1*2 -1 = -3result = -3
}
//negative以'-'开头则为true
if (!negative) {result = -result = 3;
}
return result = 3;
java二进制、八进制、十六进制间转换详细相关推荐
- 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...
C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...
- java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制
java编程思想_007打印二进制,八进制,十六进制 package wzs.test2; //打印二进制,八进制,十六进制 public class Test { public static voi ...
- c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...
利用一个函数实现十进制数转换成二进制,八进制,十六进制.利用的是栈的后进先出的思想.算法简单. #include #include #include #define STACK_INIT_SIZE 1 ...
- 十进制转二进制 / 八进制 / 十六进制的手算方法,及其数学原理的通俗解释
前言:接触计算机的同学学习基础课程时,不免会碰到十进制转二进制 / 八进制 / 十六进制这种问题.常见的方法有"除以2/8/16看余数".本文在介绍方法的前提上,对其数学原理进行了 ...
- 在BASH下简单实现十进制到二进制和十六进制的转换
#!/bin/bash #scriptname:conver #在BASH下简单实现十进制到二进制和十六进制的转换 cat<<info 1] 10=>2 2] 10=>16 i ...
- c语言中十进制转化二进制八进制十六进制,进制转换:二进制、八进制、十六进制、十进制之间的转换...
对于基础薄弱的读者,本节的内容可能略显晦涩和枯燥,如果觉得吃力,可以暂时跳过,用到的时候再来阅读.但是本节所讲的内容是学习编程的基础,是程序员的基本功,即使现在不学,迟早也要回来学. 上节我们对二进制 ...
- 各种进制转换(二,八,十,十六进制间转换)详解附代码
进制转换 原理 进制转换是人们利用符号来计数的方法.进制转换由一组数码符号和两个基本因素"基数"与"位权"构成. 基数是指,进位计数制中所采用的数码(数制中用来 ...
- 关于Java二进制和十六进制转化的一点问题
今天在学习Spring Security在做密码加密配置时,有个地方需要做一个二进制和十进制的转化,自己便随手写了一个,没想到,在运行了几次之后始终验证不过,郁闷的不行,由于我用的是Spring Se ...
- python中二进制转8进制_Pythoner:教你二进制八进制十六进制的快速转化
Hi,你的 Python 学的怎么样了?要记得每天进步一点点哦,跟小帅b做个约定,再过不久我们一起来项目实战,所以现在咱们少看点片,没事敲下键盘,练练 Python 吧. 要是哪一天,我能爬取所有苍井 ...
最新文章
- js流程图:aworkflow.js
- 军队计算机技术职称考试 类别,军队人员参加计算机考试科目设置和报考规定...
- 如何导出久其报表所有数据_如何选择好的HR软件
- Oracle中如何删除重复数据
- 禁止吸烟(字符串替换)
- requests有意思的proxies参数-何时使用代理有效
- 实例--[QSerialPort]串口通信
- iis服务器显示目录,iis服务器目录
- 【渝粤教育】广东开放大学 商业银行业务与经营 形成性考核 (32)
- 现代大学英语精读第二版(第二册)学习笔记(原文及全文翻译)——3B - What My Garden Taught Me—the Hard Way(园艺给我的教训——历经磨难才学会)
- OSChina 周六乱弹 —— 啊,谢谢好心的先生
- 简易的共享交通系统管理系统
- 软考高级 真题 2012年上半年 信息系统项目管理师 案例分析
- 《数据结构与算法》(二十)- 散列表查找
- Unity RawImage背景无缝连接移动
- 汇通汉诺塔益智 3.0
- EdgeView 2 for Mac(图像查看器)
- Android打开相册并上传图片至服务器
- golang编程cobra-cli库使用
- Jonny Mo的读书笔记——《完成任务不找借口》之二
热门文章
- centos7安装Java
- java定时调度main方法_java相关:Spring中实现定时调度的几种方法
- AAAI 2019 论文解读 | 基于区域分解集成的目标检测
- 岗位推荐 | 阿里巴巴达摩院招聘自然语言处理、机器翻译算法专家
- 深度学习中多层全连接网络的梯度下降法及其变式
- 人工智能:物体检测之Faster RCNN模型
- 牛客网 二叉树的层序遍历
- 西安电子科技大学第16届程序设计竞赛 C题
- python——LeetCode刷题
- java和c语言的区别_单片机为什么一直用C语言,不用其他编程语言?只有学过的知道...