Java中「与运算,或运算,异或运算,取反运算。」

版权声明一:本文为博主原创文章,转载请附上原文出处连接和本声明。
版权声明二:本网站的全部做品会及时更新,欢迎你们阅读后发表评论,以利做品的完善。
版权声明三:对不遵照本声明或其余违法、恶意使用本网内容者,保留追究其法律责任的权利。
本文连接:https://home.cnblogs.com/u/zak24/java

Java中的「与运算 & 」 规则 :都为1时才为1,不然为0

  • 即:两位同时为“1”,结果才为“1”,不然为0
例如:
    public static void main(String args[]) {
        System.out.println( 7 & 9);

        /*
         * 7的二进制
         * 7/2=3...1
         * 3/2=1...1
         * 1/2=0...1
         * 直到商为0,将余数倒过来就是111
         * 因而得数是111
         */

        /*
         * 9的二进制
         * 9/2=4...1
         * 4/2=2...0
         * 2/2=1...0
         * 1/2=0...1
         * 因而得数是1001
         */

        /*
         *  7二进制 0111    
         *  9二进制 1001
         * ------------ 
         *          0001   ==1
         */        
    }

Java中的「或运算 | 」 规则 :有一个为1,则为1

  • 即 :参加运算的两个对象只要有一个为1,其值为1。
例如:
    public static void main(String args[]){     
        System.out.println(7 | 9);  

        /*
         * 7二进制 0111
         * 9二进制 1001
         * -----------
         *         1111 == 15
         * */    
    }

Java中的「异或运算 ^ 」 规则 :都不一样时,为1

  • 即:参加运算的两个对象,若是两个相应位为“异”(值不一样),则该位结果为1,不然为0。
例如:
    public static void main(String args[]){
        System.out.println( 7 ^ 9);
        /*
         * 7二进制 0111
         * 9二进制 1001
         * ------------
         *        1110 == 14
         * */
    }   

Java中的「取反运算 ~ 」 规则 :按位取反

  • 即:对一个二进制数按位取反,即将1变0,0变1。
  • 按位取反运算符“~”的原理:是将内存中的补码按位取反(包括符号位)。
  1. 二进制数在内存中是以补码的形式存放的。网站

  2. 补码首位是符号位,0表示此数为正数,1表示此数为负数。spa

  3. 正数的补码、反码,都是其自己。code

  4. 负数的反码是:符号位为1,其他各位求反,但末位不加1 。对象

  5. 负数的补码是:符号位不变,其他各位求反,末位加1 。blog

  6. 全部的取反操做、加一、减1操做,都在有效位进行。内存

    • 例如:正数it

    • 正数9(二进制为:1001)在内存中存储为01001,必须补上符号位(开头的数字0为符号位)。io

    • 转二进制:0 1001function

    • 计算补码:0 1001

    • 按位取反:1 0110 (变成补码,这明显变成了一个负数补码,由于符号位是1)

    • 补码减1 :1 0101

    • 在取反 :1 1010

    • 符号位为1是负数,即-10

    • 例如:负数

    • 负数-1(二进制为:0001)在内存中存储为10001,必须补上符号位(开头的数字1为符号位)。

    • -1的反码为11110

    • -1的补码为11111 (也能够理解为:反码末位加上1就是补码)

    • ~-1的取反 00000

    • ~-1结果为:0

例1:
package test2;

public class CeshiQuFan {

    public static void main(String args[]){
            System.out.println(~7);//正数 

        /*
         * 7二进制 0000 0000 0000 0000 0000 0000 0000 0111
         *         0000 0000 0000 0000 0000 0000 0000 0111 反码
         *         0000 0000 0000 0000 0000 0000 0000 0111 补码        
         *         1000 0000 0000 0000 0000 0000 0000 1000 获得正数的补码以后进行取反 (这时获得的是负数)符号位为: 1
         *         因此~7的值为:-8
         */
    }
}    
例2:
package test2;

public class CeshiQuFan {

    public static void main(String args[]){
            System.out.println(~-1);//负数    

  /*   * -1二进制 1000 0000 0000 0000 0000 0000 0000 0001   *          1000 0000 0000 0000 0000 0000 0000 1110  反码(负数的反码是:符号位为1,其他各位求反,但末位不加1。)   *            1000 0000 0000 0000 0000 0000 0000 1111  补码(负数的补码是:符号位不变,其他各位求反,末位加1 。)   *          0000 0000 0000 0000 0000 0000 0000 0000  获得负数的补码以后进行取反 (这时获得的是正数) 符号位为: 0   *           因此~-1的值为:0   */    }}
相关文章
相关标签/搜索