java基础-操作符-按位操作符

java中的操作符:1.操作符接收一个或多个参数,并生成一个新值;

                             2.有些操作符可以改变操作数本身的值,这被称为副作用,例如自增,自减操作符,这类带有副作用的操作符  的最普遍的用途就是用来产生副作用。但是使用此类操作符生成的值,与没有副作用的操作符生成的值没有什么区别。

                             3.几乎所有的操作符都只能操作"基本类型",例外的是"=","==","!="。这三个操作符可以操作所有对象。

                             4.String类支持"+","+="操作符。

 

java中的按位操作符:按位与(&),按位或(|),按位异或(^),按位非(~)

 1.用来操作整数基本数据类型中的单个比特(bit),即二进制位。它会对2个参数中对应的位执行布尔代数运算,并最终生成一      个结果。

 2. 按位与(&):如果2个输入位都是1,则生成一个输出位1,否则生成一个输出位0;

     按位或(|):如果2个输入位中有一个是1,则生成一个输出位1,只有在2个输入位都为0的情况下,它才生成一个输出位0;

     按位异或(^):如果输入位的某一个是1,但不全都是1,那么它生成一个输出位1;

     按位非(~):也称取反操作,属于一元操作符,只对一个操作数进行操作(其它均是二元操作符),它生成与输入位相反的         值,若输入0,则输出1,若输入1,则输出0。

3.按位操作符可以与等号联合使用,以便合并运算和赋值:&=,|=,^=等于都是合法的,其含义为:A&=B等价为A=A&B。其它同       理。但是由于按位非(~)操作符是一元操作符,所以不能和等号联用。

4.java中将布尔类型作为一种单比特值对待,所以它多少有点特殊,可以对它执行按位与,按位或和按位异或运算,但不能执行     按位非。

5.对于布尔值,按位操作符具有与逻辑操作符相同的效果,只是它们不会中途短路。此外,按位操作符新增了一个异或操作符,     它并未出现在逻辑操作符的列表中。

 

以下为验证过程:

java基础-操作符-按位操作符

输出结果为:

java基础-操作符-按位操作符

a&b 即10101010&01010101,由于按位与是2个相同位上的值都为1时才为1,所以结果为0

a|b即10101010|01010101,按位或是相同位上有1就为1,所以结果为11111111

a^b即10101010^01010101,按位异或是相同位上的值不同时为1,否则为0,刚好,这2个数每个相同位上分别为0和1,所以结果也为11111111

~a,int类型在java中的存储空间是4个字节,即32位,a的实际二进制数应该是00000000000000000000000010101010,按位取反后结果即为11111111111111111111111101010101,同理b按位取反也是一样。

a&=b等价于a=a&b,即把a&b的值赋给a,所以a&=b的值为0,即a=0;

a|=b等价于a=a|b,即把a|b的值赋给a,注意此时a的值在上一步按位与时已经给重新赋值为0了,所以0按位或b的值就是b,此时a=b;

a^=b等价于a=a^b,此时,a=b,a^b的值为0,所以结果为0.

 

测试布尔类型的按位操作

java基础-操作符-按位操作符

输出结果:

java基础-操作符-按位操作符

 

测试按位运算没有出现短路现象

java基础-操作符-按位操作符

定义三个静态变量

java基础-操作符-按位操作符

定义三个方法,每个方法里给这3个变量赋值

main方法中调用:

java基础-操作符-按位操作符

 

输出结果为:

java基础-操作符-按位操作符

此时可以证明没有出现短路现象。