您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > 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   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
Java 的BlockingQueue接口, java.util.concurrent.BlockingQueue, 代表着一个队列可以安全的插入和取元素.换句话说,多线程通过BlockingQueue安全的插入或者取元素,不会有任何...【详细内容】
2020-07-10   java  点击:(0)  评论:(0)  加入收藏
工具IDE为idea16JDK环境为1.8gradle构建,版本:2.14.1Mysql版本为5.5.27Tomcat版本为7.0.52流程图绘制(xmind)建模分析软件PowerDesigner16.5 首先我们需要先了解我们这个文章系...【详细内容】
2020-07-09   java  点击:(1)  评论:(0)  加入收藏
导引作为当前业界最成熟的编程语言的Java,以其开发的各类应用,可以说是涉及到每个领域,包括而不限于桌面应用、Web应用、移动应用、智能终端、云端应用、IoT应用、大数据应用、...【详细内容】
2020-07-09   java  点击:(0)  评论:(0)  加入收藏
篇文章将重点分析jvm,涉及到的内容包括jvm内存模型,类加载器,GC回收算法,GC回收器,整体偏向于理论。本篇文章不适合初学者,适合具有3年以上开发经验的技术人员,欢迎大家一起交流分...【详细内容】
2020-07-06   java  点击:(0)  评论:(0)  加入收藏
时间过得真快,2020已经过去了一半,但是疫情好像还没有真正的消灭,人们出行还是得带着口罩,天气越来越热,受罪啊。...【详细内容】
2020-07-05   java  点击:(2)  评论:(0)  加入收藏
听到Android应用程序开发时会想到哪种编程语言?当然是JAVA!世界各地的开发人员仍在想Kotlin是否有未来。但是两年前,随着Kotlin在Google I / O中的引入,Kotlin在Android应用程...【详细内容】
2020-07-05   java  点击:(7)  评论:(0)  加入收藏
字符流输入输出操作通过字节流就可以实现,为什么需要字符流呢?这是因为,同其它许多程序设计语言使用ASCII字符集不同,Java使用Unicode编码表示字符。ASCII符集是以一个字节(8比特...【详细内容】
2020-07-04   java  点击:(0)  评论:(0)  加入收藏
众所周知,JavaScript 一直在快速变化。在新的 ES2020 中,有很多很棒的特性,我们大都已经迫不及待尝试了。老实说,有时我们可以用不同角度来编写代码,同样也能达到相同的效果,而且...【详细内容】
2020-07-03   java  点击:(0)  评论:(0)  加入收藏
前言在编程中异常报错是不可避免的。特别是在学习某个语言初期,看到异常报错就抓耳挠腮,常常开玩笑说编程1分钟,改bug1小时。今天就让我们来看看什么是异常和怎么合理的处理异...【详细内容】
2020-07-03   java  点击:(1)  评论:(0)  加入收藏
在这篇文章中,我将向您展示如何通过JavaScript在网页上访问设备的摄像头,并支持多种浏览器,而无需外部库。我不好看,好看的是文字如何使用相机要访问用户的相机(或麦克风),我们使用...【详细内容】
2020-06-30   java  点击:(2)  评论:(0)  加入收藏
用任何编程语言来开发程序,都是为了让计算机干活,比如编写一篇文章,下载一首MP3等,而计算机干活的CPU只认识机器的指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可...【详细内容】
2020-06-29   java  点击:(1)  评论:(0)  加入收藏
JavaScript 语言中的 for 循环用于多次执行代码块,它是 JavaScript 中最常用的一个循环工具,还可用于数组的遍历循环等。我们为什么要使用 for 循环呢?打个比方,例如我们想要...【详细内容】
2020-06-28   java  点击:(3)  评论:(0)  加入收藏
数据库中可以用 datetime、bigint、timestamp 来表示时间,那么选择什么类型来存储时间比较合适呢?前期数据准备 通过程序往数据库插入 50w 数据 数据表:CREATE TABLE `users`...【详细内容】
2020-06-28   java  点击:(0)  评论:(0)  加入收藏
这几天有幸接到华为二面的面试通知,整个过程大概有九十分钟,面试官真的问的东西很全面的,如果不做足准备是肯定不可以的(当时也问到了多概念的问题)。面试之后,将这些面试题目做了...【详细内容】
2020-06-27   java  点击:(0)  评论:(0)  加入收藏
枚举是 JDK 1.5 新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信...【详细内容】
2020-06-25   java  点击:(0)  评论:(0)  加入收藏
开发中常常会碰到读取磁盘上的配置文件等内容,然后获取文件内容转字符串String类型,那么就需要编写一个API来实现这样的功能。首先准备一个测试需要的文件test.xml该文件放到...【详细内容】
2020-06-25   java  点击:(1)  评论:(0)  加入收藏
在 JS 没有提供一种简便的方法来替换所有指定字符。 在 Java 中有一个 replaceAll() ,replaceAll(String regex, String replacement))方法使用给定的参数 replacement 替换...【详细内容】
2020-06-24   java  点击:(0)  评论:(0)  加入收藏
封装概念封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想。 类的封装是指在定义一个类时,将类中的属性私有化,即使用private...【详细内容】
2020-06-24   java  点击:(0)  评论:(0)  加入收藏
Cleave,Voca,Slick,Tensorflow等> Photo by Patrick Hendry on Unsplash JavaScript从一开始就得到了发展。 毫无疑问,JS是最受欢迎的语言之一,它可能会保持这种状态。 流行的库...【详细内容】
2020-06-23   java  点击:(0)  评论:(0)  加入收藏
书上用了一个阶乘功能来演示递归:7.1 递归(阶乘)function factorial(number){ if (number <= 1){ return 1; }else { return number * arguments.calle...【详细内容】
2020-06-23   java  点击:(0)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条