Java中位运算符的使用
先预知识:
数据在计算机中是以二进制的形式进行存储的,而二进制在内存中是以补码的形式进行存储的。在介绍位运算之前,首先来看一下原码、反码和补码的概念。由于正数的原码、反码和补码的形式都是一样的,所以以下主要针对负数进行讲解。
原码:在数值前直接加一符号位的表示法。
反码:原码的数值位取反(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中位运算符的使用的更多相关文章
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...
- Java的位运算符实例——与(&)、非(~)、或(|)、异或(^)
一.Java的位运算符实例——与(&).非(~).或(|).异或(^) 1.与(&) 0 & 2 = 0 0 0 0 0 1 0 0 1 0 2.非(~) ~0 = 7 0 0 ...
- Java基础-位运算符Bitwise Operators
Java基础-位运算符Bitwise Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.位运算特点 位运算符分为按位与(&),按位或(|),按位异或(^ ...
- 【JAVA零基础入门系列】Day5 Java中的运算符
运算符,顾名思义就是用于运算的符号,比如最简单的+-*/,这些运算符可以用来进行数学运算,举个最简单的栗子: 已知长方形的长为3cm,高为4cm,求长方形的面积. 好,我们先新建一个项目,命名为Rec ...
- Java 中的运算符和流程控制
Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...
- Java中移位操作运算符的理解
java中的移位运算符有三种: 1. <<: 左移 2. >>: 右移 3. >>>: 无符号右移 使用方法:左移就是将左边的操作数在内存中的二进制数据左移指 ...
- JAVA_SE基础——11.Java中的运算符
在程序设计中,运算符应用得十分广泛,通过运算符可以将两个变量进行任意运算.数学中的"+"."-"."*"."/"运算符同 ...
- 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 ...
- Java 中位移运算符 >>,>>>,<<
Java 中的三种位移运算符 java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : ...
随机推荐
- doy09 文件处理,拷贝文件
一\在python中打开文件,得到文件语句并赋值给一个变量 f=open('a.txt','r',encoding='utf-8')) 默认打开模式就为r: 2.通过句柄对文件进行操作 data=f ...
- Python1 简介及安装、基础
Python介绍 Python是面向对象,高级语言,解释,动态和多用途编程语言.Python易于学习,而且功能强大,功能多样的脚本语言使其对应用程序开发具有吸引力. Python的语法和动态类型具有其 ...
- HTML5 缓存: cache manifest
---恢复内容开始--- 1:MIME TYPE:text/cache-manifest 服务器配置MIME类型2:需要由你创建的:NAME.manifest 创建manifest文件3:给 < ...
- 水果(map的嵌套)
夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了 ...
- 《剑指offer》斐波那契数列
本题来自<剑指offer> 斐波那契数列 矩阵覆盖 题目一: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 思路: ...
- Happiness
1575: Happiness 时间限制: 1 Sec 内存限制: 1280 MB 题目描述 Chicken brother is very happy today, because he atta ...
- resources中添加配置文件
- JAVA,字符串替换
package l515; //例5.15 //字符串替换 public class NewStr { public static void main(String[] args) { String ...
- RabbitMq相关运维
# 命令查询所有用户列表rabbitmqctl list_users # 使用命令对 xiandian-admin 用户进行授权set_permissions xiandian-admin '.*' ...
- WebClient 支持 gzip, deflate
低调偷偷的下别人数据 发现下出来乱码- 用F12看看请求,原来人家是用了gzip压缩的- 试着自己加个Heading wc.Headers.Add("Accept-Encoding" ...