数字在计算机中是以补码形式保存的,正数的原码、反码、补码都是一样的,而负数的补码是其反码加1。因此,正整数的二进制转换比较容易,负整数就略微复杂一点了。
负整数由十进制转换为二进制的步骤为:取反,加1。例如:将-5转换为二进制的步骤如下:
首先,5的二进制为101,扩展到32位为00000000 00000000 00000000 00000101,取反之后为11111111 11111111 11111111 11111010,加1之后就是11111111 11111111 11111111 11111011,这就是-5的二进制表示。
负整数由二进制转换成十进制也是一样的步骤:取反,加1。继续用上面的例子,-5的二进制11111111 11111111 11111111 11111011取反之后为00000000 00000000 00000000 00000100,加1为00000000 00000000 00000000 00000101,这个二进制的值是5,而最初的二进制数的第一位是1,表示负数,因此转换之后是-5。
Java源码里提供了一些函数来进行这样的进制转换,例如:Integer.toBinaryString(int i)返回i的二进制字符串表示,Integer.toHexString(int i)返回i的十六进制字符串表示,Integer.toOctalString(int i)返回i的八进制字符串表示,另外,Integer.toString(int i, int radix)返回i的radix进制表示,但和之前的方法有所不同,我们来看看下面的例子:
System.out.println(Integer.toString(-5, 2));
System.out.println(Integer.toBinaryString(-5));
System.out.println(Integer.toString(5, 2));
System.out.println(Integer.toBinaryString(5));
输出结果为:
-101
11111111111111111111111111111011
101
101
当需要转换的数字为正数,则上面的两个函数返回结果是一样的,当需要转换的数字为负数时,结果就大不同了,toString(i, radix)函数返回的是-101,而toBinaryString(i)返回的才是与-5对应的真正的二进制字符串。八进制、十六进制也是一样的。
相应的,Java源码里也提供了二进制转换为十进制的函数,例如:Integer.parseInt(String s, int radix)、Integer.valueOf(String s, int radix),这两个函数返回结果完全一样,事实上valueOf(s, radix)内部直接调用了parseInt(s, radix)函数,但是需要注意,这两个函数与上面的Integer.toString(int i, int radix)的操作是相反的,参数s是“-101”这种形式的,不是真正的二进制(或八进制、十六进制)表示。
ps:真正的二进制字符串转换为十进制的函数不知道Java源码里有没有,如果有以后再补上。
分享到:
相关推荐
主要介绍了Java实现的进制转换工具类,结合完整实例形式分析了Java实现二进制、十六进制、字符串、数组等相关转换操作技巧,需要的朋友可以参考下
二进制的转换;数据类型的由来,java的进制转换,数据的类型范围,转码,补码,反码的算法
Java编写的进制转换程序,实现了进制之间的转换,用于学习数据结构,使用Java原生sdk实现,可以运行。
二进制数组转换为二进制字符串 将二进制数组转换为十六进制字符串 将十六进制转换为二进制字节数组 将十六进制转换为二进制字符串
读取文件中的二进制文件并将二进制转换成文本文档并输出
Java进制转换 正整数的十进制转换二进制 ...二进制转换为十进制 二进制转十进制的转换原理:从二进制的右边第一个数开始,每一个乘以2的n次方,n从0开始,每次递增1。然后得出来的每个数相加即是十进制数
最近由于工作上的需要,遇到进制转换的问题。涉及到的进制主要是 十进制,十六进制,二进制中间的转换。还包括了一个字节数组 与十六进制字符串的互相转换。估计遇到蓝牙通信的朋友,应该用的上。
java语言编写的十进制正数和负数转换二进制算法。
本代码用JAVA语言编写,实现了十进制,二进制,十六进制和八进制的转换
java中Integer包装类的详细讲解(java二进制操作,所有进制转换) 十进制转成二进制 十进制转八进制 十进制转十六进制 十六进制转成十进制 十六进制转成二进制 八进制转成十进制 等等所有进制转换和操作
Java迭代10进制转换2进制.
任意输入一个十进制整数,包括正数负数,通过程序实现可以输出相应的二进制编码
输入一个十进制数可以转化成二进制,八进制,十六进制。.java格式的右键编辑可以打开。
本程展示如何使用Java中Swing程序来设计进制转换器,实现十进制到二进制,八进制,十六进制的转换。
java实现任意进制的转换,包括2进制转16进制,10进制转16进制,10进制转任意进制,36进制加法,可自行手动设置转换进制和需要转换的数字.
本代码信息: 使用语言:java 功能:将整数(包括正负整数)转换成对应的二进制数,然后再控制台上显示。
java_十进制数转换为二进制,八进制,十六进制数的算法
刚学Java,老师让座一个实数进制转换的程序,分享出来以供互相学习。
.java文件,对java基础的数组部分的进制类型转换部分的说明。
java 进制转换,二进制 十进制 十六进制 正数 负数的进制等等!.docxjava 进制转换,二进制 十进制 十六进制 正数 负数的进制等等!.docx