java回忆录—神奇的进制世界
进制就是进位制,是人们规定的一种进位方法。 对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位。
二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。
我们知道不同进制的数表示形式肯定不一样,不然怎么区分开来呢,对,不同进制的数据组成。
二进制——由0,1组成,以0b开头。(b大小写都行)
八进制——由0,1,…,7组成,以0开头。
十进制——由0,1,…,9组成,整数默认为十进制。
十六进制——由0,1,…,9,a,b,c,d,e,f组成(大小写均可),以0x开头。
那先来看下各个进制之间如何转换的吧?我们需要掌握的进制转换:
1)十进制转换成任意进制2)任意进制转换成十进制3)任意进制转换成任意进制
首先大家把X进制的X叫做基。
先来看看第一种进制转换(十进制转换成任意进制)
接下来介绍的这种方法叫做除基取余法。
什么叫除基取余法呢?
举个例子:十进制10转换成二进制为1010
从这张图可以看出为什么这样叫了吧,其实十进制转换成任意进制都可以用这种方法,只不过除数变了而已。如二进制转换成八进制基就为8,十进制转换成十六进制基就为16,等等。。。
当然还有一种更简单的方法,叫做拆分填充法
咋一看有点像填图的感觉,当然这种方式用于比较小的数,因为比较容易拆分嘛。
这个就介绍完了,是不是很简单呢,那么再来看看第二种转换(任意进制转换成十进制)
这种转换的话应该很简单了,只需要掌握个技巧。
记住上面这张图,即记住每种进制的每一位表示多少,其实很好记的,就是基的次方递增。如二进制为2^0,2^1,……,然后对应位相乘再累加即可。
例子:十六进制0x16e转换成十进制为 1*16^2+6*16^1+14*16^0 = 366。
其他进制转换成十进制的方法同理。
还有最后一种进制转换(任意进制转换成任意进制)
其实这个也是不难的,有一种思路就是将十进制作为一个中间进制。
比如二进制要转换成八进制,可以先将二进制转换成十进制,再将十进制转换成八进制,这两种进制的转换上面都讲过,这里就不重复讲了。
这是一种方式,其实还有一种小技巧,我们可以发现八进制或十六进制的基是二进制的基的倍数即 8=2^3,16=2^4
所以我们可以利用这一点,当二进制和八进制之间相互转换的时候,我们可以将八进制的一位当做二进制的三位。
怎么理解呢?举个例子:
二进制100100转换成八进制为44
怎么来的呢?
同理二进制转换成十六进制的原理:二进制的四位表示十六进制的一位
如:二进制11001000转换成十六进制为c8
是不是觉得这种方式更简单呢,赶快试试吧。
我们都知道,如果不用它写什么特别的东西的话,java能用到的多点的也就是二进制,因为有些文件的流(例如图片,视屏,音乐)都是二进制的………
在计算机内,有符号数有三种表示方式:原码、反码、补码。所有数据的运算都是采用补码进行的。
原码
就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码
正数的补码与其原码相同;负数的补码是在其反码的末位加1。
现在来看看正数和负数在计算机中是如何存储的,当然肯定都是补码了。
+7、-7
+7的原码、反码、补码都相同:0000 0111
-7的原码:1000 0111 反码:1111 1000 补码:1111 1001
那么如何已知补码求原码呢?其实很简单,就是取反加1
如:已知某数X的补码1110 1110B,试求其原码。
取反加1:1001 0001 + 1 = 1001 0010
记住:
已知负数的原码——>求补码:取反加1(符号位不变)
已知负数的补码——>求原码:取反加1(符号位不变)
上面讲了那么多,那么在java中如何使用呢?其实转换的都有相应的函数帮你转换,那么还懂它如何转换干嘛,我们学这个,不能停留在“只知其然,不知其所以然。”我们应该知道它计算机是如何转换的,这样用起来才能游刃有余。
那么就来看看java中如何使用吧。
首先在java中使用的是Integer中的静态方法:
十进制转换成十六进制:Integer.toHexString(int i)十进制转换成八进制: Integer.toOctalString(int i)十进制转换成二进制: Integer.toBinaryString(int i)其他进制转换成二进制:Integer.parseInt(String s,int radix)其中,参数 String s ,必需,表示要被解析的字符串。int radix ,可选,表示要解析的数字的基数。 该函数使用第二个参数指定的基数,其值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
例子:
public class JiZhi {public static void main(String args[]) {int i = 10;System.out.println("十进制数 " + i + " 转换成十六进制为 " + Integer.toHexString(i));System.out.println("十进制数 " + i + " 转换成八进制为 " + Integer.toOctalString(i));System.out.println("十进制数 " + i + " 转换成二进制为 "+ Integer.toBinaryString(i));String str = "A";System.out.println("十六进制数 " + str + " 转换成10进制为 "+ Integer.parseInt(str, 16));str = "012";System.out.println("八进制数 " + str + " 转换成10进制为 "+ Integer.parseInt(str, 8));str = "1010";System.out.println("二进制数 " + str + " 转换成10进制为 "+ Integer.parseInt(str, 2));}}
结果:
java回忆录—神奇的进制世界相关推荐
- java读取文件 16进制_Java对文件的16进制读取和操作
大家可以参考一下源代码的相关部分注释,然后写出自己的16进制处理程序. 有几个重点地方: 16进制字符串->10进制数 int input = Integer.parseInt ...
- Java 字符串,byte[],16进制的字符串互转
Java 字符串,byte[],16进制的字符串互转 /** * 字符串转换成十六进制字符串 */ public static String str2HexStr(String str) { char ...
- 哈理工 oj——神奇的进制转换
神奇的进制转换 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 248(150 users) Total Accepted: 175(1 ...
- java 中文转16进制ASCll码
java 中文转16进制ASCll码 在设置户外大屏时了解到大屏的通讯,可使用MODBUS TCP协议,因此学习了一下,发现和大屏通讯设置难度不大,还是老一套的发送16进制指令,唯一有兴趣的是中文转1 ...
- Java中数字的进制转换
常用的进制类型:二进制.八进制.十进制.十六进制.其中十进制是人类计数最常用的进制,大部分操作都是以十进制作为桥梁进行转换. 1 常用进制数字声明方式 常用的进制,除十进制之外,在代码中声明其它进制数 ...
- java基础语法以及进制的转换
关键字 关键字: 被Java语言赋予特定含义的单词 关键字特点 组成关键字的字母全部小写 关键字注意事项 goto和const作为保留字存在,目前并不使用 类似IDEA这样的集成工具,针对关键字有特殊 ...
- PELCO-D控制协议 java socket 传输16进制的编码
功能很简单,但是 网上流传的资料太少了: java如何给单片机串口发送一个16进制的命令: 我是用PELCO-D控制协议来控制 摄像头的转动:后面256取余数是 部分硬件设备才支持:不要的同学可以去掉 ...
- java 做的简易进制计算器
import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Scale {JFrame f;JPane ...
- Java 中常用的进制转换
前言 所谓进制转换,就是人们利用符号来计数的方法.进制转换由一组数码符号和两个基本因素"基数"和"位权"所构成.其中基数是指进位计数制中所采用的数码的个数,逢 ...
最新文章
- spoj 26130	Binary numbers
- 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这
- mysql windows 安装_Windows 安装 Mysql(zip格式)
- mysql clob转string_Java获取Oracle中CLOB字段转换成String
- mycat mysql端口多少_mycat 9066管理端口 常用命令
- OpenCV人脸检测并把图片写成avi视频
- RHive的安装和用法
- 【声传播】——多层介质平面波的反射问题
- eclipse 下编写java code 比较好的设置和快捷键
- 句句真研—每日长难句打卡Day3
- Python出现‘ascii‘ codec can‘t encode characters...的解决方法
- Hadoop 101: Programming MapReduce with Native Libraries, Hive, Pig, and Cascading
- linux 结束8080端口,记Tomcat在Linux环境下开机启动无法监听8080端口
- SpringBoot学习---整合JDBC,Druid,MyBatis
- 网络协议 终章 - GTP 协议:复杂的移动网络
- thinkpad电源管理解决办法 win2019
- linux遇到hint:num lock on
- Codeforces 1089K King Kog's Reception(线段树)
- 高考加油的c语言程序,2020祝高三高考加油的句子 高考加油一句话
- mysql先过滤后分组_MySQL分组过滤