聊聊java中的进制问题

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)


推荐阅读