先预知识:

  数据在计算机中是以二进制的形式进行存储的,而二进制在内存中是以补码的形式进行存储的。在介绍位运算之前,首先来看一下原码、反码和补码的概念。由于正数的原码、反码和补码的形式都是一样的,所以以下主要针对负数进行讲解。
  原码:在数值前直接加一符号位的表示法。
  反码:原码的数值位取反(0变1,1变0)。
  补码:原码加1。
  PS:已知补码,求原码。
  分析:按照求负数补码的逆过程,可以采取补码减1再取反的思路。但是对于二进制来说,减1取反和取反加1的效果是一样的。所以仍然可以采用取反加1的方法来求得原码。
Java中的位运算符有:&(按位与)、|(按位或)、^(按位异或)、~(取反)、<<(左移)、>>(右移)、>>>(无符号右移).以int型数据为例介绍,占4个字节,32位:(以下1代表true,0代表false)
&(按位与):当两边操作数全为true时返回true,否则返回false
如,6&3=2,看步骤:
6 00000000 00000000 00000000 00000110
3 00000000 00000000 00000000 00000011
& -------------------------------------------------------
2 00000000 00000000 00000000 00000010
-6&3=2,看步骤:
-6 11111111 11111111 11111111 11111010(补码,原码取反再加1)
3  00000000 00000000 00000000 00000011
& ---------------------------------------------------------
2  00000000 00000000 00000000 00000010
|(按位或):两边操作数只要有一边为true,结果就为true,只有当两边操作数全为false时才返回false
如,6|3=7,看步骤:
6 00000000 00000000 00000000 00000110
3 00000000 00000000 00000000 00000011
| ---------------------------------------------------------
7 00000000 00000000 00000000 00000111
-6|3=-5,看步骤:
-6 11111111 11111111 11111111 11111010(补码,原码取反再加1)
3  00000000 00000000 00000000 00000011
| ----------------------------------------------------------
-5 10000000 00000000 00000000 00000101(原码,补码取反再加1)
^(按位异或):两边操作数相同就为false,不同则为true
如,6^3=5,看步骤:
6 00000000 00000000 00000000 00000110
3 00000000 00000000 00000000 00000011
^ ---------------------------------------------------------
5 00000000 00000000 00000000 00000101
-6^3=-7,看步骤:
-6 11111111 11111111 11111111 11111010(补码,原码取反再加1)
3  00000000 00000000 00000000 00000011
^ ---------------------------------------------------------
-7 10000000 00000000 00000000 00000111(原码,补码取反再加1)
~(取反):二进制每一位取反,1变0,0变1
如:~6=-7,看步骤:
6  00000000 00000000 00000000 00000110
~ --------------------------------------------------------
-7 10000000 00000000 00000000 00000111(原码,补码取反再加1)
~(-6)=5,看步骤:
-6 11111111 11111111 11111111 11111010(补码,原码取反再加1)
~ --------------------------------------------------------
5  00000000 00000000 00000000 00000101
<<(左移):所有位向左移动一位,相当于乘以2,低位用0补齐
如:6<<1=12,看步骤:
6     00000000 00000000 00000000 00000110
<< -----------------------------------------------------------
12 000000000 00000000 00000000 00001100
如:-6<<1=-12,看步骤:
-6     11111111 11111111 11111111 11111010(补码,原码取反再加1)
<< ----------------------------------------------------------
-12 100000000 00000000 00000000 00001100(原码,补码取反再加1)
>>(右移):所有位向右移动一位,相当于除以2,高位按符号位补齐
如:6>>1=3,看步骤:
6   00000000 00000000 00000000 00000110
>> ---------------------------------------------------------
3   00000000 00000000 00000000 000000110
-6>>1=-3,看步骤:
-6 11111111 11111111 11111111 11111010(补码,原码取反再加1)
>> ---------------------------------------------------------
-3 10000000 00000000 00000000 000000110
>>>(无符号右移):所有位向右移动一位,相当于除以2,高位用0补齐
如:6>>1=3,看步骤:
6      00000000 00000000 00000000 00000110
>>> ---------------------------------------------------------
3    00000000 00000000 00000000 000000110
-6>>>1=2147483645,看步骤:
-6   11111111 11111111 11111111 11111010(补码,原码取反再加1)
>>> -----------------------------------------------------------------
2147483645 01111111 11111111 11111111 111111010

Java中位运算符的使用的更多相关文章

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

    位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...

  2. Java的位运算符实例——与(&)、非(~)、或(|)、异或(^)

    一.Java的位运算符实例——与(&).非(~).或(|).异或(^) 1.与(&) 0 & 2 = 0 0 0 0 0 1 0 0 1 0 2.非(~) ~0 = 7 0 0 ...

  3. Java基础-位运算符Bitwise Operators

    Java基础-位运算符Bitwise Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.位运算特点 位运算符分为按位与(&),按位或(|),按位异或(^ ...

  4. 【JAVA零基础入门系列】Day5 Java中的运算符

    运算符,顾名思义就是用于运算的符号,比如最简单的+-*/,这些运算符可以用来进行数学运算,举个最简单的栗子: 已知长方形的长为3cm,高为4cm,求长方形的面积. 好,我们先新建一个项目,命名为Rec ...

  5. Java 中的运算符和流程控制

    Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...

  6. Java中移位操作运算符的理解

    java中的移位运算符有三种: 1. <<: 左移 2. >>: 右移 3. >>>: 无符号右移 使用方法:左移就是将左边的操作数在内存中的二进制数据左移指 ...

  7. JAVA_SE基础——11.Java中的运算符

    在程序设计中,运算符应用得十分广泛,通过运算符可以将两个变量进行任意运算.数学中的"+"."-"."*"."/"运算符同 ...

  8. java中位运算

    1byte(字节)=8bit(比特) 1 0 0 0 0 0 0 0 1   2进制的1的原码 反码 补码 0 0 0 0 0 0 0 0   2进制的0的原码 反码 补码 -1 1 0 0 0 0 ...

  9. Java 中位移运算符 >>,>>>,<<

    Java 中的三种位移运算符 java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     ...

随机推荐

  1. 基于vue-cli3的vue项目移动端样式适配,lib-flexible和postcss-px2rem

    1,安装 flexible和 postcss-px2rem(命令行安装) npm install lib-flexible --save npm install postcss-px2rem --sa ...

  2. Java测试的题目感想

    日期:2018.9.24 星期一 博客期:012 说起来测试真的是来的时候信心满满,考完的时候慌得出神!我感觉自己会用Scanner类做输出和文件操作就可以在有限时间内把它搞出来了!事实证明我错了!我 ...

  3. PHP实现网络Socket及IO多路复用

    一直以来,PHP很少用于socket编程,毕竟是一门脚本语言,效率会成为很大的瓶颈,但是不能说PHP就无法用于socket编程,也不能说PHP的socket编程性能就有多么的低,例如知名的一款PHP ...

  4. linux下命令窗口中$和#的区别

    $表示现在的用户是普通用户#表示现在的用户是root用户 # 代表你能做任何事$ 代表你能做一些/下和/home目录的所有事

  5. Python1 简介及安装、基础

    Python介绍 Python是面向对象,高级语言,解释,动态和多用途编程语言.Python易于学习,而且功能强大,功能多样的脚本语言使其对应用程序开发具有吸引力. Python的语法和动态类型具有其 ...

  6. mysql中有多种存储引擎,每种引擎都有自己的特色

    mysql中有多种存储引擎,每种引擎都有自己的特色. 用途: MyISAM:快读, Memory:内存数据, InnoDB:完整的事务支持 锁: MyISAM:全表锁定, Memory:全表锁定, I ...

  7. Wowza 相关

    下载: 1.https://www.wowza.com/pricing/installer 安装: https://www.wowza.com/docs/how-to-install-and-conf ...

  8. AI学习吧-登录注册

    登录注册注销 如果需要给表设置权限,没有登录就不可以查看,只需要在每个视图函数之前加上Auth_classes=[ ]即可! 增加两张表,做登录认证 #models.py #做登录验证 class U ...

  9. C/C++返回内部静态成员的陷阱(转)

    在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼.这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员.如果你的内存是在函数内栈上分配 ...

  10. String 类的实现(1)浅拷贝存在的问题以及深拷贝实现

    1.   浅拷贝 : 也称位拷贝 , 编译器只是直接将指针的值拷贝过来, 结果多个对象共用 同 一块内存, 当一个对象将这块内 存释放掉之后, 另 一些对象不知道该块空间已经还给了系统, 以为还有效, ...