【Java学习笔记】移位运算符和逻辑运算符
来源:互联网 发布:mac装office软件 编辑:程序博客网 时间:2024/05/17 06:00
1.&和&&
按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;
逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。(短路)
2.|和||
按位或:a|b是把a和b都转换成二进制数然后再进行或的运算
逻辑或:a||b是只要有一个为真结果就为真。(短路)
3.~ 非
非运算符用符号“~”表示,其运算规律如下:
如果位为0,结果是1,如果位为1,结果是0,下面看一个简单例子。
public class data15
{
public static void main(String[] args)
{
int a=2;
System.out.println("a 非的结果是:"+(~a));
}
}
异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,相同则结果为0,不同则结果为1。下面看一个简单的例子。
public class data16
{
public static void main(String[] args)
{
int a=15;
int b=2;
System.out.println("a 与 b 异或的结果是:"+(a^b));
}
}
运行结果
a 与 b 异或的结果是:13
分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。
5.移位
<< :左移运算符,num<<1,相当于num*2;
>>:右移运算符,num>>1,相当于num/2;空位以原来的符号位补齐
>>>:无符号右移,忽略符号位,空位以0补齐。
1.byte、short、char在做移位运算之前,会被自动转换为int类型,然后再进行运算。
2.byte、short、int、char类型的数据经过移位运算后结果都为int型。
3.long经过移位运算后结果为long型。
4.在左移位(<<)运算时,如果要移位的位数大于被操作数对应数据类型所能表示的最大位数,那么先将要求移位数对该类型所能表示的最大位数求余后,再将被操作数移位所得余数对应的数值,效果不变。比如1<<35=1<<(35%32)=1<<3=8。
5.对于有符号右移位(>>)运算和无符号右移位(>>>)运算,当要移位的位数大于被操作数对应数据类型所能表示的最大位数时,那么先将要求移位数对该类型所能表示的最大位数求余后,再将被操作数移位所得余数对应的数值,效果不变。。比如100>>35=100>>(35%32)=100>>3=12。
因为如果移位的位数超过了该类型的最大位数,那么有效信息就全没了,这种移位是毫无用处的。
而对于无符号右移的一个应用场景:
对01111100 11100010 00101111 10101010,按照四位取值,此时需要用到右移和按位与,此时不适合使用>>,而应该使用>>>,因为如果是负数的话,>>就不会不断移入有效位,而使用>>>等全移入0时可知数据全部移动完毕(该应用场景有可能有疏漏),而且经常会使用的是无符号右移。
对变量进行位运算不会改变变量的值,除非是复合赋值表达式。
- 【Java学习笔记】移位运算符和逻辑运算符
- Java 逻辑运算符、按位运算符、移位运算符
- Java 学习笔记01 移位运算符
- java 位运算符 位逻辑运算符 和 移位运算符
- Java移位运算符笔记
- 移位运算符 以及 位逻辑运算符
- java学习笔记(一)----位运算符与逻辑运算符
- java学习06--比较运算符和逻辑运算符
- 算数运算符(+-*/)优先级>移位运算>位运算>逻辑运算
- java 移位运算符中<<和>>运算
- 【C语言】移位运算符、位运算符、逻辑运算符
- Java学习基础:运算符和表达式(算数运算、关系运算、逻辑运算、位运算、条件运算、赋值运算)
- Java 笔记-移位运算符
- Java学习笔记(运算符/Java的算术运算符/赋值运算符/比较运算符/逻辑运算符)
- Java 移位操作>>,<<,>>> 位逻辑运算符 &, |,~,^
- 移位运算符学习
- 逻辑运算之移位运算的学习
- JAVA移位运算符
- django版hello world
- Java并发编程:深入剖析ThreadLocal
- 名企笔试:好未来2017秋招笔试:(倒置字符串)
- java中转成json
- Tomcat配置SSL以及Tomcat CA证书安装
- 【Java学习笔记】移位运算符和逻辑运算符
- Java String 真的是不可变的吗
- K-Means聚类算法原理
- Paypal+本地支付,是跨境外贸收款最好的解决方案!
- HTTP协议详解
- docker命令记录
- C++输入cin详解
- 在angularjs中通过ts编写时,如何添加中英文转换
- Java并发编程:volatile关键字解析(转载)