学了这么久的Java,你对进制转换还记得多少?

本文起源于小雷学习hashmap原理时看到hashmap扩容机制发现本身对二进制运算忘得差很少了,可能大部分人和我差很少,日常工做中用不到的技术,你学习了是不错,可是忘记的会很快,这就须要咱们常常性的复习咱们学习过的技术(这里手动狗头棒砸向本身)bash

一、十进制转二进制

将十进制数除以2直至商为0或者1,将每一步的余数记录下来,而后将余数反过来就是相应的二进制了网络

例子:十进制8转二进制学习

第一次8除以2得4余0,第二次4除以2得2余0,第三次2除以2得1余0,最后余1,获得的余数依次为0001。ui

反过来就是1000,计算机内部表示数的长度是固定的,好比8位,16位,32位,位数不足在高位补齐(为何在高位,由于在高位补0对这个数没影响)spa

Java代码实现:code

public class mapHashCodeTest {
     public static void main(String[] args) {
         String str = toBinary(8);
         System.out.println(str);
     }
     static String toBinary(int num) {
         String str = "";
         while (num != 0) {
             str = num % 2 + str;
             num = num / 2;
         }
         return str;
     }

}
复制代码

二、二进制转十进制

二进制1000 ,转十进制的话,只要拿对应位上的0、1数字乘以2的幂(这里的幂次从个位开始算,个位是零,依次日后推)cdn

8 = 0 * 2(0次幂) + 0 * 2(1次幂) + 0 * 2(2次幂) + 0 * 2(3次幂)blog

能够直接调用Integer.parseInt()实现,例如:ip

System.out.println(Integer.parseInt("1000",2));
复制代码

结果为:8string

三、位与运算(&)

若是是二进制数则能够直接进行运算,若是是十进制或者十六进制则须要转换为二进制进行运算。运算规则为:从个位开始,两个数都为1则为1,不然为0

例如:

8的二进制为1000, 9的二进制为1001,位与运算后为1000

代码实现:

int a = 8;
int b = 9;
System.out.println(a&b); // 结果为8
复制代码

与运算在不少场景中都会用到,例如ip地址和子网掩码进行与运算获得网络地址。

四、位或运算(|)

两个数都转为二进制数,运算规则:从个位数开始,两个数只要有一个为1则为1,不然为0。

例如:

8的二进制为1000, 9的二进制为1001,位或运算后为1001

代码实现:

int a = 8;
int b = 9;
System.out.println(a|b); // 结果为9
复制代码

五、位异或运算(^)

运算规则是:两个数转为二进制,而后从高位开始比较,若是相同则为0,不相同则为1。

例如:

8的二进制为1000, 9的二进制为1001,位异或运算后为0001

代码实现:

int a = 8;
int b = 9;
System.out.println(a^b); // 结果为1
复制代码

接下来比较绕,请仔细看

六、位非运算符(~)

将数转为二进制数,运算规则:从个位数开始,位为1则为0,位为0则为1。

Java中全部数据的表示方法都是以补码的形式表示,若是没有特别说明,Java中的数据类型默认是int, int数据类型的长度是8位,一位是4字节,就是32字节,32bit。

例如:

8的二进制为1000,

补码后为:0000 0000 0000 0000 0000 0000 0000 1000

取反为:1111 1111 1111 1111 1111 1111 1111 0111

由于高位是1,因此原码为负数,负数的补码是其绝对值的原码取反,末尾再加1

所以咱们可将这个二进制数的补码进行还原,

末尾减1得反码:1111 1111 1111 1111 1111 1111 1111 0110

将反码取反得原码:0000 0000 0000 0000 0000 0000 0000 1001

去除补码位得1001,因此8位非获得-9

代码实现:

int a = 8;
System.out.println(~a); //结果为-9
复制代码

若是你喜欢本文,

请扫描二维码关注获取更多文章

相关文章
相关标签/搜索