美文网首页
java运算符全讲解

java运算符全讲解

作者: 木木子丶 | 来源:发表于2021-03-11 13:20 被阅读0次

    十进制转二进制
    原理
    给定的数循环除以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

    相关文章

      网友评论

          本文标题:java运算符全讲解

          本文链接:https://www.haomeiwen.com/subject/vgrgfltx.html