一:按位操作符是什么?
并最终生成一个结果。按位操作符来源于C语言面向底层的操作,那么什么是面向底层的操作呢?Java为什么要引入面向底层的操作符呢?
第一个问题:
这种操作经常直接操作硬件,设置硬件寄存器内的二进制位也就是它是直接操作整数基本类型中的单个“比特”的。按位操作符会对两个参数中对应的位执行布尔代数运算,
第二个问题:
我们知道Java的设计初衷是嵌入电视机顶盒内的,所以这种面向底层的操作仍被保留了下来,但是这种操作用的并不多
二 四种按位操作符
Java中共有四种按位操作符
1.按位“与”操作符(&)
如果两个输入位都是1,则按位“与”生成一个输出位1;否则生成一个输出位0.
2.按位或操作符(|)
如果两个输入位只有一个是1,则按位“或”操作符生成一个输出位1;只有在这两个输入位都是0的情况下,它才会生成一个输出位0.
3.按位“异或”操作符(^)
如果输入位有一个是1但不全是1,那么按位“异或“操作生成一个输出位1.否则生成一个输出位0
4.按位"非"操作符(~)
按位非是一个一元操作符,其他都是二元操作符,按位非也称为取反操作符,它的作用就是生成与输入位相反的值,若输入0则输出1,同样输入1,输出0
三 注意
1.按位操作符可以于等号联合使用(=),比如:&=、|=、^=,但是按位非(~)不可以
2.按位操作具有和逻辑操作符相同的效果,只是按位操作不会短路。
四 来一个Demo
package deme_one;
public class ExerciseOne {
public static void main(String [] args){
System.out.println("于");
new One().one();//与
new One().two();//或
new One().three();//异或
new One().four();// 非
}
}
/**
*
* @author Administrator
*
*/
class One{
/**
* 与
*/
void one(){
int a=11;
int b=12;
System.out.println("**********************于***********************");
System.out.println(a&b);
System.out.println(Integer.toBinaryString(a&b));
System.out.println(a&=b);
System.out.println(Integer.toBinaryString(a&=b));
}
/**
* 或
*/
void two(){
System.out.println("**********************或***********************");
System.out.println(11|13);
System.out.println(Integer.toBinaryString(11|13));
}
/**
* 异或
*/
void three(){
System.out.println("**********************异或***********************");
System.out.println(11^13);
System.out.println(Integer.toBinaryString(11^13));
}
/**
* 非
*/
void four(){
System.out.println("**********************非***********************");
System.out.println(~11);
System.out.println(Integer.toBinaryString(~11));
}
}
来看看运行结果:
1.a&=b什么意思呢?
a&=b 就是a=a&b;
2.Integer.toBinaryString什么意思?
它返回一个无符号的二进制的字符串
3.来分析下11&12的结果怎么会是1000呢?
11转换成二进制的结果就是1011,二12转成二进制是1100,根据运算只有两个位都是1结果才是1,故结果是1000.或,异或,非的运算方式类似。