进制就是进位制,是人们规定的一种进位方法。 对于任何一种进制—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回忆录—神奇的进制世界相关推荐

  1. java读取文件 16进制_Java对文件的16进制读取和操作

    大家可以参考一下源代码的相关部分注释,然后写出自己的16进制处理程序. 有几个重点地方: 16进制字符串->10进制数          int input = Integer.parseInt ...

  2. Java 字符串,byte[],16进制的字符串互转

    Java 字符串,byte[],16进制的字符串互转 /** * 字符串转换成十六进制字符串 */ public static String str2HexStr(String str) { char ...

  3. 哈理工 oj——神奇的进制转换

    神奇的进制转换 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 248(150 users) Total Accepted: 175(1 ...

  4. java 中文转16进制ASCll码

    java 中文转16进制ASCll码 在设置户外大屏时了解到大屏的通讯,可使用MODBUS TCP协议,因此学习了一下,发现和大屏通讯设置难度不大,还是老一套的发送16进制指令,唯一有兴趣的是中文转1 ...

  5. Java中数字的进制转换

    常用的进制类型:二进制.八进制.十进制.十六进制.其中十进制是人类计数最常用的进制,大部分操作都是以十进制作为桥梁进行转换. 1 常用进制数字声明方式 常用的进制,除十进制之外,在代码中声明其它进制数 ...

  6. java基础语法以及进制的转换

    关键字 关键字: 被Java语言赋予特定含义的单词 关键字特点 组成关键字的字母全部小写 关键字注意事项 goto和const作为保留字存在,目前并不使用 类似IDEA这样的集成工具,针对关键字有特殊 ...

  7. PELCO-D控制协议 java socket 传输16进制的编码

    功能很简单,但是 网上流传的资料太少了: java如何给单片机串口发送一个16进制的命令: 我是用PELCO-D控制协议来控制 摄像头的转动:后面256取余数是 部分硬件设备才支持:不要的同学可以去掉 ...

  8. java 做的简易进制计算器

    import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Scale {JFrame f;JPane ...

  9. Java 中常用的进制转换

    前言 所谓进制转换,就是人们利用符号来计数的方法.进制转换由一组数码符号和两个基本因素"基数"和"位权"所构成.其中基数是指进位计数制中所采用的数码的个数,逢  ...

最新文章

  1. spoj 26130 Binary numbers
  2. 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这
  3. mysql windows 安装_Windows 安装 Mysql(zip格式)
  4. mysql clob转string_Java获取Oracle中CLOB字段转换成String
  5. mycat mysql端口多少_mycat 9066管理端口 常用命令
  6. OpenCV人脸检测并把图片写成avi视频
  7. RHive的安装和用法
  8. 【声传播】——多层介质平面波的反射问题
  9. eclipse 下编写java code 比较好的设置和快捷键
  10. 句句真研—每日长难句打卡Day3
  11. Python出现‘ascii‘ codec can‘t encode characters...的解决方法
  12. Hadoop 101: Programming MapReduce with Native Libraries, Hive, Pig, and Cascading
  13. linux 结束8080端口,记Tomcat在Linux环境下开机启动无法监听8080端口
  14. SpringBoot学习---整合JDBC,Druid,MyBatis
  15. 网络协议 终章 - GTP 协议:复杂的移动网络
  16. thinkpad电源管理解决办法 win2019
  17. linux遇到hint:num lock on
  18. Codeforces 1089K King Kog's Reception(线段树)
  19. 高考加油的c语言程序,2020祝高三高考加油的句子 高考加油一句话
  20. mysql先过滤后分组_MySQL分组过滤

热门文章

  1. java如何编写spi接口_软件模拟SPI接口程序代码(4种模式)
  2. *基于RT-Thread的战舰开发板连接Onenent云平台(学习笔记)**
  3. 网上发现的一个 《Flashflex大全》
  4. 【Docker系列】Docker的网络
  5. RealView Development Suite 4.0 Professional安装
  6. TechnoAP公司发布“脉冲形状鉴别”选件
  7. 探讨顶级 Layer 1 智能合约区块链的代币经济学
  8. 各种HIC处理数据之间的相互转化
  9. 指令集与微架构 扫盲
  10. 人工智能——归结推理