转载自: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二进制、八进制、十六进制间转换详细相关推荐

  1. 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...

    C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...

  2. java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制

    java编程思想_007打印二进制,八进制,十六进制 package wzs.test2; //打印二进制,八进制,十六进制 public class Test { public static voi ...

  3. c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...

    利用一个函数实现十进制数转换成二进制,八进制,十六进制.利用的是栈的后进先出的思想.算法简单. #include #include #include #define STACK_INIT_SIZE 1 ...

  4. 十进制转二进制 / 八进制 / 十六进制的手算方法,及其数学原理的通俗解释

    前言:接触计算机的同学学习基础课程时,不免会碰到十进制转二进制 / 八进制 / 十六进制这种问题.常见的方法有"除以2/8/16看余数".本文在介绍方法的前提上,对其数学原理进行了 ...

  5. 在BASH下简单实现十进制到二进制和十六进制的转换

    #!/bin/bash #scriptname:conver #在BASH下简单实现十进制到二进制和十六进制的转换 cat<<info 1] 10=>2 2] 10=>16 i ...

  6. c语言中十进制转化二进制八进制十六进制,进制转换:二进制、八进制、十六进制、十进制之间的转换...

    对于基础薄弱的读者,本节的内容可能略显晦涩和枯燥,如果觉得吃力,可以暂时跳过,用到的时候再来阅读.但是本节所讲的内容是学习编程的基础,是程序员的基本功,即使现在不学,迟早也要回来学. 上节我们对二进制 ...

  7. 各种进制转换(二,八,十,十六进制间转换)详解附代码

    进制转换 原理 进制转换是人们利用符号来计数的方法.进制转换由一组数码符号和两个基本因素"基数"与"位权"构成. 基数是指,进位计数制中所采用的数码(数制中用来 ...

  8. 关于Java二进制和十六进制转化的一点问题

    今天在学习Spring Security在做密码加密配置时,有个地方需要做一个二进制和十进制的转化,自己便随手写了一个,没想到,在运行了几次之后始终验证不过,郁闷的不行,由于我用的是Spring Se ...

  9. python中二进制转8进制_Pythoner:教你二进制八进制十六进制的快速转化

    Hi,你的 Python 学的怎么样了?要记得每天进步一点点哦,跟小帅b做个约定,再过不久我们一起来项目实战,所以现在咱们少看点片,没事敲下键盘,练练 Python 吧. 要是哪一天,我能爬取所有苍井 ...

最新文章

  1. js流程图:aworkflow.js
  2. 军队计算机技术职称考试 类别,军队人员参加计算机考试科目设置和报考规定...
  3. 如何导出久其报表所有数据_如何选择好的HR软件
  4. Oracle中如何删除重复数据
  5. 禁止吸烟(字符串替换)
  6. requests有意思的proxies参数-何时使用代理有效
  7. 实例--[QSerialPort]串口通信
  8. iis服务器显示目录,iis服务器目录
  9. 【渝粤教育】广东开放大学 商业银行业务与经营 形成性考核 (32)
  10. 现代大学英语精读第二版(第二册)学习笔记(原文及全文翻译)——3B - What My Garden Taught Me—the Hard Way(园艺给我的教训——历经磨难才学会)
  11. OSChina 周六乱弹 —— 啊,谢谢好心的先生
  12. 简易的共享交通系统管理系统
  13. 软考高级 真题 2012年上半年 信息系统项目管理师 案例分析
  14. 《数据结构与算法》(二十)- 散列表查找
  15. Unity RawImage背景无缝连接移动
  16. 汇通汉诺塔益智 3.0
  17. EdgeView 2 for Mac(图像查看器)
  18. Android打开相册并上传图片至服务器
  19. golang编程cobra-cli库使用
  20. Jonny Mo的读书笔记——《完成任务不找借口》之二

热门文章

  1. centos7安装Java
  2. java定时调度main方法_java相关:Spring中实现定时调度的几种方法
  3. AAAI 2019 论文解读 | 基于区域分解集成的目标检测
  4. 岗位推荐 | 阿里巴巴达摩院招聘自然语言处理、机器翻译算法专家
  5. 深度学习中多层全连接网络的梯度下降法及其变式
  6. 人工智能:物体检测之Faster RCNN模型
  7. 牛客网 二叉树的层序遍历
  8. 西安电子科技大学第16届程序设计竞赛 C题
  9. python——LeetCode刷题
  10. java和c语言的区别_单片机为什么一直用C语言,不用其他编程语言?只有学过的知道...