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

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表示此数为负数。

  3. 正数的补码、反码,都是其本身。

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

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

  6. 所有的取反操作、加1、减1操作,都在有效位进行。

    • 例如:正数

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

    • 转二进制:0 1001

    • 计算补码: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
   */     }
}

 

Java中「与运算,或运算,异或运算,取反运算。」的更多相关文章

  1. Java中byte转换int时与0xff进行与运算的原因

    http://w.baike.com/LGAdcWgJBBQxRAHUf.html 转帖 java中byte转换int时为何与0xff进行与运算 在剖析该问题前请看如下代码 public static ...

  2. java中a++和++a在较复杂的运算中分析

    关于连加和连减:http://blog.csdn.net/ieayoio/article/details/46431843 以下是一段普遍都了解的代码: public static void main ...

  3. JAVA中整型的存储和左右移位运算

    byte,1个字节8位, -128 ~ 127之间,首位表示正负,0为正,1为负,0111,1111表示127,-127为127取反1000,0000,再加1,即1000,0001为-127,-127 ...

  4. bis和bic命令实现或和异或运算

    从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入 ...

  5. java :: Java中的双冒号操作符

    java中的双冒号操作符 定义 双冒号运算操作符是类方法的句柄,lambda表达式的一种简写,这种简写的学名叫eta-conversion或者叫η-conversion. 通常的情况下: 把 x -& ...

  6. java中符号类型和无符号类型的问题分析

    一 参考博文 java中无符号类型的解决方案 二 java中的无符号数和有符号数 在计算机中,可以区分正负的类型,称为有符号类型,无正负的类型,称为无符号类型. 使用二进制中的最高位表示正负 计算机中 ...

  7. Java中int和short的转化

    例子[1]: 第一种情况: short a = 1; a = a + 1; // 这一步会报错 System.out.print(a); 编译器会报错,原因如下: 第二种情况: short a = 1 ...

  8. Java中short和int的转换

    例子[1]: 第一种情况: short a = 1; a = a + 1; // 这一步会报错 System.out.print(a); 编译器会报错,原因如下: 第二种情况: short a = 1 ...

  9. Java中math类的常用函数

    Java中math类的常用函数 在 Java 中 Math 类封装了常用的数学运算,提供了基本的数学操作,如指数.对数.平方根和三角函数等 只要在源文件的顶部加上下面这行代码就不必在数学方法名和常量名 ...

随机推荐

  1. ZooKeeper分布式锁的实现原理

    七张图彻底讲清楚ZooKeeper分布式锁的实现原理[石杉的架构笔记] 文章转载自:https://juejin.im/post/5c01532ef265da61362232ed#comment(写的 ...

  2. MySort作业与IO-Myhead

    一.MySort 1.题目要求 模拟实现Linux下Sort -t : -k 2的功能. 要有伪代码,产品代码,测试代码(注意测试用例的设计) 参考 Sort的实现.提交博客链接. 2.产品代码 im ...

  3. TCP最大报文段长度MSS

    最大报文段长度(MSS)表示TCP传往另一端的最大数据库的长度.当一个连接建立时,连接的双方都要通告各自需要接收的MSS选项(MSS选项只能出现在SYN报文段中).如果一方不接收来自另一方的MSS值, ...

  4. Cannot use unsafe construct in safe context

    https://stackoverflow.com/questions/25953887/how-to-use-unsafe-code-in-safe-contex I am not sure if ...

  5. react 的定义组件(了解)

    react 中定义组件的方法 1. 定义组件 React.createClass() (被淘汰了) 定义组件中的函数 methods 的中的 this 统统指向 组件 2. 函数定义组件 定义的组件时 ...

  6. 警告(alert)、确认(confirm)

    我们在访问网站的时候,有时会突然弹出一个小窗口,上面写着一段提示信息文字.如果你不点击“确定”,就不能对网页做任何操作,这个小窗口就是使用alert实现的. 语法: alert(字符串或变量);注:a ...

  7. uboot下如何读写rtc pcf2127的寄存器?

    一. pcf2127简介 pcf2127是实时时钟计数器模块,支持两种接口,i2c和spi,笔者以i2c为例 二. pcf2127的读写操作时序 2.1 写操作 根据i2c的规范https://www ...

  8. [NodeJS] 优缺点及适用场景

    概述: NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 本文就个人使用经验对这些问题进行探讨. 一. ...

  9. PHP 文件夹上传

    一.我的准备情况说明. 编辑器:sublime text3(用什么编辑器看自己爱好)服务器构建:使用phpstudy2014构建服务器,服务器文件存储在我自身电脑D盘的www文件中.(安装phpstu ...

  10. 【经验分享】Mongodb操作类实现CRUD

    一.背景 公司项目中在做数据存储时使用到Mongodb,所以想着将Mongodb的操作封装后可供项目中其他成员方便使用. 附上Mongodb的下载地址: 下载 1.Mongodb类 此类主要是用来构造 ...