目录
一、首先了解下如何将 二进制位转换为十进制位 拿11011来举例 (乘)
1. 拿数字不断除2取余并记录下来,依次排序,直到商为0为止。余数从下向上拼接便为二进制数
<< 符号
//<<为乘2的?次数
System.out.println("1 << 1"); //2
System.out.println("1 << 2"); //4
System.out.println("2 << 3"); //16
>>符号
//>>为除2的?次数
System.out.println("4 >> 1"); //2
System.out.println("16 >> 2"); //4
^ (异或)
一、首先了解下如何将 二进制位转换为十进制位 拿11011来举例 (乘)
1. 首先将二进制数的每一位与对应的权值相乘,从右往左依次位 1、2、4、8、16、32....
2. 将所得结果相加 1x1 + 1x2 + 0x4 + 1x8 + 1x16 = 27
3. 再来两个例子:0011 -> 3; 00110 -> 6;
二、学习下如何十进制位转换为二进制位 拿27来举例 (除)
1. 拿数字不断除2取余并记录下来,依次排序,直到商为0为止。余数从下向上拼接便为二进制数
27 % 2 = 13 余 1
13 % 2 = 6 余 1
6 % 2 = 3 余 0
3 % 2 = 1 余 1
1 % 2 = 0 余 1
结果为 11011 好的以上就是用27来举例的转换过程
2. 别闲着拿十进制25再试一下
25 % 2 = 12 余 1
12 % 2 = 6 余 0
6 % 2 = 3 余 0
3 % 2 = 1 余 1
1 % 2 = 0 余 1
结果为 11001 用25转换的过程就在这了
三、那么开始学习异或是怎么工作的
28 和 16 会先转换为二进制然后再去比较
比较方法:如果两个位的值不同则结果为1,否则为0。
System.out.println(28 ^ 16); //12
1. 28转二进制位
28 -> 0
14 -> 0
7 -> 1
3 -> 1
1 -> 1
二进制结果为 11100
2. 16转二进制位
16 -> 0
8 -> 0
4 -> 0
2 -> 0
1 -> 1
二进制结果为 10000
3. ^ 比较 如果两个位的值不同则结果为1,否则为0。
11100 ^
10000
01100 -> 十进制为 12