您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

聊聊java中的进制问题

时间:2019-09-04 13:14:00  来源:  作者:

JAVA中的进制也算是面试中经常会遇到的一个知识点,不管是计算问题,还是涉及到的基础知识。因此这篇文章对其进行一个整理。主要参考了慕课网上的视频,特在此说明。不管是你初学者还是工作中,又或者是找工作中。本文都能对你有所帮助。

本篇文章主要解决以下几个问题:

1、二进制的历史

2、java中的进制转换

3、java中的移位运算

4、数据大小端问题

5、进制在java中的使用

下面我们就针对这些问题,来分析一下java中的进制。

一、二进制的历史

这一小节优点闲扯淡的感觉,要说二进制的历史其实可以追述到一个大数学家莱布尼茨。当时有一个法国传教士白晋来到了咱们中国,走的时候带走了中国的一本古书《易经》,白晋回到德国之后,莱布尼茨就看了《易经》里面的伏羲八卦图。突然灵机一动(动没动是我瞎猜的),就发明了二进制。不管不管怎么样二进制的由来或多或少都收到了中国伏羲八卦图的影响。

聊聊java中的进制问题

 

这就是伏羲八卦图,怎么想到的我也不知道,不过你仔细观察看一下,最上面的乾卦三横实线,顺时针转动,实线变虚线。你可以想象成从000到111的变化。

二、java中的进制转换

其实常见的进制转换主要有以下几种:

(1)十进制转二进制

(2)十进制转八进制

(3)十进制转十六进制

(4)二进制转十进制

(5)八进制转十进制

(6)十六进制转十进制

十进制的范围就是0-9,二进制的范围是0-1,八进制的范围是0-7,十六进制的范围是0-f。java提供了工具类来实现进制的转换。因此在笔试的时候你可以直接使用。

聊聊java中的进制问题

 

 

然后我们运行一下就可以直接看到结果了。比较简单。

三、java中的位操作

java中为了使得运算方便而且快速,可以直接进行位操作进行运算。常见的有以下六种:

聊聊java中的进制问题

 


聊聊java中的进制问题

 


聊聊java中的进制问题

 


聊聊java中的进制问题

 


聊聊java中的进制问题

 


聊聊java中的进制问题

 


聊聊java中的进制问题

 

上面这几张图,主要是概念用法。下面我们看位运算的几个应用: (1) 判断int型变量a是奇数还是偶数 a&1 = 0 偶数 a&1 = 1 奇数

(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1 (先右移再与1)

3) 将int型变量a的第k位清0,即a=a&~(1<<k) (10000 取反后为00001 )

(4) 将int型变量a的第k位置1,即a=a|(1<<k)

(5) int型变量循环左移k次,即a=a<<k|a>>16-k (设sizeof(int)=16)

(6) int型变量a循环右移k次,即a=a>>k|a<<16-k (设sizeof(int)=16)

(7)对于一个数 x >= 0,判断是不是2的幂。

聊聊java中的进制问题

 

 

(8)不用temp交换两个整数

聊聊java中的进制问题

 

(9)计算绝对值

聊聊java中的进制问题

 

(10)取模运算转化成位运算 (在不产生溢出的情况下)

a % (2^n) 等价于 a & (2^n - 1)

(11)乘法运算转化成位运算 (在不产生溢出的情况下)

a * (2^n) 等价于 a<< n

四、大小端问题

1、小端法(Little-Endian)

低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端

2、高端法(Big-Endian)

高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端

为什么会有大小端呢?

在计算机中,每个地址单元都对应着一个字节(8bit)数据。java中int类型占据4个字节,long占据8个字节,计算机是由32位和64位之分的,处理器因此也就是有32位和64位之分,现在有一个32位的处理器,突然来了一个8字节64位的数据,这时候处理器就不能一下子处理了,于是就要把8个字节的数据分开存放,这一存放就要分出个高地了,谁在前面谁在后面的问题。

比如说下面的这个例子(前几天做的一道面试原题):

小端情况

聊聊java中的进制问题

 

大端情况

聊聊java中的进制问题

 

这个在大端模式下是正常的。牢记牢记。

五、进制的使用场景

上面在介绍的时候其实说了一部分,但是这里再简单的举个例子,最常见的例子就是序列化。我们知道客户端我们可以使用java语言编写,但是服务器就不一定了,可能是java,也可能是C++,这时候传输数据怎么办呢?这俩语言之间又相互不认识。这时候客户端java就可以把我们的数据切分序列化成二进制数,二进制数计算机到哪都能认识,这时候把二进制数发送到服务端,服务端按照一定的规则反序列化就OK了。

对于字符串来说那就是太简单了,我们直接getBytes就可以转化成byte。但是对于int该怎么办呢?我们给出一个例子,其他的可以自己测试一下。

聊聊java中的进制问题

 

OK,进制中常见的问题先列出这么多,欢迎批评指正。



Tags:java   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  Tags: java  点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  Tags: java  点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Tags: java  点击:(5)  评论:(0)  加入收藏
1、通过条件判断给变量赋值布尔值的正确姿势// badif (a === &#39;a&#39;) { b = true} else { b = false}// goodb = a === &#39;a&#39;2、在if中判断数组长度不为零...【详细内容】
2021-12-24  Tags: java  点击:(6)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  Tags: java  点击:(11)  评论:(0)  加入收藏
传统游戏项目一般使用TCP协议进行通信,得益于它的稳定和可靠,不过在网络不稳定的情况下,会出现丢包严重。不过近期有不少基于UDP的应用层协议,声称对UDP的不可靠进行了改造,这意...【详细内容】
2021-12-23  Tags: java  点击:(12)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  Tags: java  点击:(12)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  Tags: java  点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  Tags: java  点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  Tags: java  点击:(19)  评论:(0)  加入收藏
▌简易百科推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(12)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(13)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(19)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(22)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条