母亲节祝福语 三明治的做法 红烧排骨的家常做法 小米粥的做法 小龙虾的做法 大闸蟹的做法 鲜贝的家常做法 卷心菜的做法 苹果派的做法 冬瓜的做法大全家常菜
当前位置: 首页 > 生活百科 >

二进制算法口诀怎么用(玩转算法面试之二进制运算)

100次浏览     发布时间:2024-11-11 09:33:54    



坚持

&,两位同时为1时结果为1,否则为0。

|,两位同时为0时结果为0,否则为1。

异或

^,两位相等结果为0,不相等为1。

~,一元运算符,取反,即1返回0、0返回1。~1=-2

Java中的左移(<<)

将二进制数字向左移动,移动几位就在最右侧补多少个0。例如 3<<1,因为3的二进制表示形式为11,向左移动一位后变为110,所以 3<<1=6。左移n位相当于乘上2的n次方。左移,按位左移,低位补0,溢出位忽略。

带符号右移(>>)

将二进制数字向右移动,移动几位就在最右侧消去多少个比特位,并最左侧填充符号位。例如 3>>1,因为3的二进制表示形式为011,所以向右移动一位后变为001,所以 3>>1=1。例如 -3>>1,因为-3的二进制补码表示为
111111111111111111111111111111011 2,所以带符号向右移动一位后变为
11111111111111111111111111111110,对应的数字为-2,所以 -3>>1=-2。1左移一位会变成0,0左移依旧为0

无符号右移(>>>)

将二进制数字向右移动,移动几位就在最右侧消去多少个比特位,并最左侧填充0

例如 -3>>>1,因为-3的二进制补码表示为
11111111111111111111111111111101,所以无符号向右移动一位后变为
01111111111111111111111111111110,对应的数字为2147483646,所以 -3>>>1=2147483646

Java数值运算过程中都是先将十进制转换为二进制然后再进行运算,再把二进制数据转换为十进制展现给用户。二进制运算规则如下:

对于有符号的而言,最高位为符号位,0表示正数,1表示负数

  • 正数的原码,反码和补码都一样,三码合一
  • 负数的反码:符号位保持不限,其他位取反
  • 负数的补码:补码 + 1

特殊的:0的反码和补码都是0(可以考虑下为什么?可以借助最后的代码进行验证)

计算机的运算的时候,都是将原码转成补码进行运算的

  下面以 -1 为例子展示原码、反码和补码的转换关系(以int数据类型为例,int类型在Java中占4字节,32位)

Java打印二进制编码:

public class BinaryTest {
    public static void main(String[] args) {
        print(1);
        System.out.println();
      	print(-1);
    }

    static void print(int num) {
      // 从第32位开始进行异或(原数值中是1的留下)
        for (int i = 31; i >= 0; i--) {
            System.out.print((num & 1 << i) == 0 ? "0" : 1);
        }
    }
}

小思考:

# 问题:
Integer.MAX_VALUE的相反数
Integer.MIN_VALUE的相反数

# 打印下尝试下吧~
public static void main(String[] args) {
        print(Integer.MIN_VALUE);
        System.out.println();
        print(-Integer.MIN_VALUE);
 }
相关文章