美文网首页
Java的位运算符详解实例

Java的位运算符详解实例

作者: cao苗子 | 来源:发表于2020-02-28 19:26 被阅读0次

1.与(&)、或(|)、非(~)、异或(^)

/**
* 测试
**/
public class Test {
    public static void main(String args[]) {

        int a = 55;
        int b = 65;

        System.out.println("a==" + Integer.toBinaryString(a));
        System.out.println("b==" + Integer.toBinaryString(b));

        //两个是 1 结果就是 1  否则是 0
        System.out.println("a&b==" + Integer.toBinaryString(a&b));
        System.out.println("a&b=" + (a&b));

        //一个是 1 结果就是 1 否则是 0
        System.out.println("a|b==" + Integer.toBinaryString(a|b));
        System.out.println("a|b=" + (a|b));

        //相互取反 1->0 0->1
        System.out.println("~a==" + Integer.toBinaryString(~a));
        System.out.println("~a=" + (~a));

        //两数相同是 0 不同是 1
        System.out.println("a^b==" + Integer.toBinaryString(a^b));
        System.out.println("a^b=" + (a^b));
    }
}
//测试打印
a==110111
b==1000001
a&b==1
a&b=1
a|b==1110111
a|b=119
~a==11111111111111111111111111001000
~a=-56
a^b==1110110
a^b=118

2.移位运算符

移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。

2.1 <<:左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0)。

2.2 >>:"有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1。

2.3 >>>: "无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0。

public class Test {
    public static void main(String args[]) {

        int c = 3241;

        System.out.println("c = "+Integer.toBinaryString(c));
        System.out.println("-c = "+Integer.toBinaryString(-c));

        //如果值为正,则在高位补0,如果值为负,则在高位补1
        System.out.println("c >> 5 = "+Integer.toBinaryString(c >> 5));
        System.out.println("-c >> 5 ="+Integer.toBinaryString(-c >> 5));

        //无论值的正负,都在高位补0
        System.out.println("c >>> 5 = "+Integer.toBinaryString(c >>> 5));
        System.out.println("-c >>> 5 = "+Integer.toBinaryString(-c >>> 5));

        //低位补0
        System.out.println("c << 5 = "+Integer.toBinaryString(c << 5));
        System.out.println("-c << 5 = "+Integer.toBinaryString(-c << 5));
    }
}

//测试打印
c = 110010101001
-c = 11111111111111111111001101010111
c >> 5 = 1100101
-c >> 5 =11111111111111111111111110011010
c >>> 5 = 1100101
-c >>> 5 = 111111111111111111110011010
c << 5 = 11001010100100000
-c << 5 = 11111111111111100110101011100000

3.运算技巧

负整数 转换成 二进制
如:-43
先求出 43 的二进制:101011
求出43的反码:010100
求出43的补码,补码就是反码+1:010101
补码就是负数在计算机中的二进制表示方法。
所以 -43的二进制就是:1111 1111 1111 1111 1111 1111 1101 0101

二进制负数 转换成 十进制
如:1111 1111 1111 1111 1111 1111 1101 0101
因为是负数所以开头肯定是 1
和上面的计算是相反的,那么就是先做 -1 :1111 1111 1111 1111 1111 1111 1101 0100
然后取反:0000 0000 0000 0000 0000 0000 0010 1011
也就是:101011
也就是正数 43 加上负号就是 -43

!!!!!
为什么要复习这个,因为最近在学习数据结构和算法,比如hasmap,里面有很多的运算符运算,好多都不记得了,所以复习一下。

相关文章

  • java操作符(移位、位与、或、异或、非)

    Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^) 左移( << )、右移( >> ) 、无符...

  • Java的位运算符详解实例

    1.与(&)、或(|)、非(~)、异或(^) 2.移位运算符 移位运算符操作的对象就是二进制的位,可以单独用移位运...

  • Java位运算符

    Java位运算符 实例说明 运算过程如下: a=3 => 00000000 00000000 00000000 ...

  • Java位运算符详解

    Java中所支持的位运算符一共有7个 &:按位与。当两位同时为1时才返回1。 |:按位或。只要有一位为1即可返回1...

  • Java位运算符详解

    Java中所支持的位运算符一共有7个 &:按位与。当两位同时为1时才返回1。 |:按位或。只要有一位为1即可返回1...

  • Java位运算符详解

    前言 之前了解过位运算符,左移<<等于乘以2,右移>>等于除以2。但是我在看jdk源码的时候发现了一个>>>三个符...

  • Java的位运算符详解实例——与(&)、非(~)、或(|

    位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是...

  • Android 9. Java的位运算符详解实例——与(&)、

    位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是...

  • python基础(四)----运算符

    一.算术运算符(基本同Java) 二.比较运算符(基本同Java) 三.赋值运算符(基本同Java) 四.位运算符...

  • java基础知识

    title: java基础知识tags: [java基础知识] 位运算符 java种的运算符有 “&”,“|”,“...

网友评论

      本文标题:Java的位运算符详解实例

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