java按位操作符和位移操作符

一,按位操作符。

1.按位与操作符(&)

如果两个数的二进制,相同位数都是1,则该位结果是1,否则是0.

例 5&4

5的二进制是  0000 0000 0000 0101

4的二进制是  0000 0000 0000 0100

则结果是       0000 0000 0000 0100  转为十进制是4。

2.按位或操作符(|)

如果两个数的二进制,相同位数有一个是1,则该位结果是1,否则是0.

例  5 | 4

5的二进制是  0000 0000 0000 0101

4的二进制是  0000 0000 0000 0100

则结果是        0000 0000 0000 0101  转为十进制是5。

3.异或操作符(^)

如果两个数的二进制,相同位数只有一个是1,则该位结果是1,否则是0.

例  5 ^ 4

5的二进制是  0000 0000 0000 0101

4的二进制是  0000 0000 0000 0100

则结果是        0000 0000 0000 0001 转为十进制是1.

4.非操作符(~)

按位“非”操作符,也称为取反操作符。若输入0,则输出1,若输入1,则输出0。

例   ~5

5的二进制是  0000 0000 0000 0101

则~5是           1111 1111 1111 1010  转为十进制是 -6。

二,位移操作符。


1.有符号位移操作符(<<   >>)

移位操作符只可用来处理整数类型,左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0),“有符号”右移位操作符(>>)则按照操作符右侧指定的位数将操作符左边的操作数向右移。“有符号”右移位操作符使用“符号扩展”;        若符号位正,则在高位插入0;若符号位负。则在高位插入1。java中增加了一种“无符号”右移位操作符(>>>),他使用“零扩展”;无论正负,都在高位插入0

例  5<<2 等于20
        5的二进制是   0000 0000 0000 0101
        左移两位         0000 0000 0001 0100

例  5>>2 等于 1
        5的二进制是   0000 0000 0000 0101
        右移两位         0000 0000 0000 0001

例  -5>>2 等于 -2
        -5的二进制是   1111 1111 1111 1011
        右移两位          1111 1111 1111 1110

2.无符号位移操作符(>>>)

Java中增加了一种“无符号”右移操作符(>>>),它使用"零扩展":无论正负,都在高位插入0.

例  5>>>2 等于 1
        5的二进制是   0000 0000 0000 0101
        右移两位         0000 0000 0000 0001

例  -5>>>2 等于 1073741822
         -5的二进制是   1111 1111 1111 1011
        右移两位          0011 1111 1111 1110

3.位移操作符可以与等号组合使用(<<=或>>=或>>>=)

组合使用时,操作符左边的值会移动由右边的值指定的位数,再将得到的结果赋值给左边的变量。但在进行“无符号”右移位结合赋值操作时,可能会遇到一个问题,如果对byte或short值进行这样的移位运算,得到的可能不是正确的结果。他们会先被转换成int类型,再进    行右移操作,然后被截断,赋值给原来的类型,在这种情况下可能得到-1的结果。

例 short s = -1;    s>>>=10
       转换int二进制是   1111 1111 1111 1111 1111 1111 1111 1111
       右移10位              0000 0000 0011  1111 1111 1111 1111 1111   (正确十进制结果为4194303)

截断16位赋值short    1111 1111 1111 1111 (实际十进制结果为-1)

三,补充。

1.负数的二进制

电脑的的世界中只有0和1,那么负数怎么表示呢?

二进制的正负是从高位看,最高位如果1则是负数,如果是0则是正数。

如果负数单纯是把最高位变为1的话,在运算中会出现不是我们想要的值,所以引入了:原码,反码,补码。正数的原码,反码,补码都一样,负数的反码是对除了符号位(最高位)对原码取反,补码是对反码+1

负数的二进制转化,计算机计算是用的补码

1、首先取出这个数的原码的二进制,

2、然后再求出反码

3、最后求出补码

例  -5

-5的原码是                1000 0000 0000 0101

求出反码的是            1111 1111 1111 1010

求出补码是                1111 1111 1111 1011

2. &和&&,|和||,~和!

&和&&都可以表示逻辑与,区别&&是短路与,只要前面条件不满足,后面条件就不再判断,而&非短路与。另外&可以做为整数的位运算符。

  |和||都可以表示“或”,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。另外|可以做为整数的位运算符。

~是一元操作符,不可与等号(=)联合使用(&=   |=   ^= 合法),而!表示逻辑非,与等于(==)组合使用表示关系操作符不等于(!=)。

原文地址:https://www.cnblogs.com/zzy20170523/p/11007064.html

时间: 2024-12-16 19:07:58

java按位操作符和位移操作符的相关文章

Java之路(二) 操作符

操作符比较简单,这里只点一下注意事项和要点,请牢记. 操作符接受一个或多个参数,并生成一个新值. Java中,几乎所有的操作符都只能操作基本类型. 例外是 = == 和 !=,它们可以操作所有的对象.此外,String类支持+和+=. 1.赋值 = 基本类型存储了实际的数值,所以为基本类型变量赋值是将一个地方的内容赋值到变量所表示的地址. 为对象赋值时,实际操作的是引用.我们如下图所示,假设T1和T2是同一个类的两个对象的引用,分别指向各自的对象.开始如A所示,当执行赋值T1=T2后,如B所示,

Thinking In Java笔记(第三章 操作符)

第三章 操作符 3.2使用Java操作符 操作符接受一个或者多个参数,并生成一个新值.参数的形式和普通方法调用不同,但是效果是相同的.普通的加减乘除和正负号都是和其他编程语言类似. 有些操作符可能会产生"副作用",改变操作数的值,这些擦佐夫最普通的用途就是用来产生副作用的.使用此类操作符产生的值和没有副作用的操作符产生的值没区别. 几乎左右的操作符都只能操作"基本类型",例外的是"=","==","!=",

Java编程思想:第3章 操作符

在最底层,Java中的数据是通过操作符来操作的. 3.1更简单的打印语句 把System.out.println(x);封装在一个类里,然后用静态导入方式,使得打印不必写那么长. import static net.mingview.util.Print.*;静态导入Print类里所有方法. 3.2使用Java操作符 3.3优先级 3.4赋值 基础类型:是值的改变 对象类型:是引用的改变 3.4.1方法调用中的别名问题 传入方法的对象型参数会有一个别名,这个别名指代的是引用. 3.5算术操作符

Java自增和自减操作符——++/--的那些事

1. 概述 自增操作符(++)和自减操作符(--)是对变量进行加1和减1的操作. 2.分类说明 ++和--是对变量进行自增1和自减1的简写操作符.许多编程任务中经常需要对变量加1或者减1,所以采用这两个操作符会方便许多.例如,下面的代码是对i自增1,而对j自减1: int i = 3, j = 3; i++; // i become 4 j--; // j become 2 i++读为i加加,i--读为i减减.这些操作符分别称为后置自增操作符和后置自减操作符,因为操作符++和--放在变量后面.这

Java的位运算符详解实例

Java的位运算符详解实例——与(&).非(~).或(|).异或(^).右移(>>).左移(<<).无符号右移(>>>) 位运算符主要针对二进制, 它包括了:“与”.“非”.“或”.“异或”."右移"."左移"."无符号右移". 从表面上看似乎有点像逻辑运算符, 但逻辑运算符是针对两个关系运算符来进行逻辑运算, 而位运算符主要针对两个二进制数的位进行逻辑运算. 下面详细介绍每个位运算符. 1.与运

switch_case,&amp;&amp;,||,条件操作符和逗号操作符,循环语句

一.switch-case switch-case语句主要用在多分支条件的环境中,在这种环境中使用if语句会存在烦琐且效率不高的弊端. switch(expression) { case const expression1: .... case const expression2; ... default: ... } 在执行过程中,expression的值会与每个case的值比较,实现switch语句的功能.关键字case和它所关联的值被称作case标号.每个case标号的值都必须是一个整形常

【C++ Primer每日一刷之十二】 箭头操作符,条件操作符,sizeof操作符,逗号,优先级

5.6. 箭头操作符 C++ 语言为包含点操作符和解引用操作符的表达式提供了一个同义词:箭头操作符(->).点操作符(第 1.5.2 节)用于获取类类型对象的成员: item1.same_isbn(item2); // run thesame_isbn member of item1 如果有一个指向 Sales_item 对象的指针(或迭代器),则在使用点操作符 前,需对该指针(或迭代器)进行解引用: Sales_item *sp = &item1; (*sp).same_isbn(item

(九)二进制、位运算、位移运算符

JavaSE(九) --二进制.位运算.位移运算符 一.二进制简介 现代电子计算机全部采用的是二进制,因为它只使用0,1两个数字符号,简单方便.数字电路中,1代表高电平,2代表低电平.这样,数据的传输通过控制电平的高低就可以了.计算机内部处理信息,都是采用二进制数来表示的.二进制(Binary)数用0和1的两个数字及其组合来表示任何数,进位规则是"逢二进一",按从右至左的顺序,右低位,左高位. 二.二进制基础 1.所有的二进制数最高位代表符号位,0表示正数,1表示负数. 2.一个字节等

Java千问:Java语言位运算符详解

很多编程语言都有位运算符,Java语言也不例外.在Java语言中,提供了7种位运算符,分别是按位与(&).按位或(|).按位异或(^).取反(~).左移(<<).带符号右移(>>)和无符号右移(>>>).这些运算符当中,仅有~是单目运算符,其他运算符均为双目运算符.在讲解这些运算符的使用之前,必须了解一个常识,那就是:位运算符是对long.int.short.byte和char这5种类型的数据进行运算的,我们不能对double.float和boolean进