十进制转二进制
原理
给定的数循环除以2,直到商为0或者1为止,将每一步除的结果的余数记录下来,然后反过来就得到相应的二进制了.
示例
比如8转二进制,第一次除以2等于4(余数0),第二次除以2等于2(余数0),第三次除以2等于1(余数0),最后余数1,得到的余数一次是 0 0 0 1
反过来就是1000,计算机内部表示数的字节长度是固定的,比如8位,16位,32位.所以在高位补齐,java中字节码是8位的,所以高位补齐就是00001000.
二进制转十进制
原理
比如8的十进制表示为00001000,不算自动补上四位为1000,此时从个位开始计算2的N次幂,依次往上推(++次幂)并乘以对应位数上的值,从0开始
示例1
所以就可以算出00001000的为,先去掉4位自动补齐字节码为1000,(2的0次幂)00 + (2的1次幂)20 + (2的2次幂)40 + (2的3次幂)1 = 8
示例2
10110010 计算 (2^00)0 + (2^11)2 + (2^20)0 + (2^30)0 + (2^41)16 + (2^41)32 + (2^50)0 + (2^61)128 = 178
^ 异或运算
规则
二进制语言,每个字节进行比较,相同则为0,不同为1(Mysql中相同为1,不同为0,计算机中还是有点区别)
示例
8 ^ 11,8转为二进制是1000,11转为二进制是1011,从高位开始比较得到的0011,转为十进制就是Integer.parseInt("0011",2) = 3;
& 与运算
规则
二进制语言,从高位开始比较,如果两个数都为1则为1,否则为0
示例1
129 & 128 ,转换为二进制分别为 64/1 32/0 16/0 8/0 4/0 2/0 1/0 1 ,取反为10000001,
64/0 32/0 16/0 8/0 4/0 2/0 1/0 1,取反为10000000,相比较后得到10000000,即128
| 或运算
规则
二进制语言,从高位开始比较,两个数只要有1个为1则为1,否则为0.
示例
129 | 128 ,二进制分别为10000001和10000000,从高位开始比较得到 10000001,即为129
~ 非运算符
规则
如果位为0,结果是1,如果位为1,结果是0,其实别蒙了,就是加入~11110000 = 00001111,把1换成0,把0换成1即可
<< 左移运算符
规则
如果 5 << 2,则为左移1位,右边补0,正数左边第一位补0,负数补1就是00000101所有的字节整体左移以为后变成 00010100 = 20,其实也就是乘以2的N次方.(但是注意,我记得有人指出超过多少位的话补位规则就变了)
右移运算符
规则
跟左移一样,把值转为二进制后向右移两位,正数左边第一位补0,负数补1,也相当于除以2的n次方
示例
6 >> 1 ,6的二进制为011取反为00000110,向右移1位则为00000011 = 3 (注意2的0次幂=1)无符号右移运算符
规则
无符号右移运算符和you移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移多少位补多少个0
网友评论