关系运算符
又称比较运算符。> < >= <= == !=
所有关系运算符的运算结果都是布尔类型,不是true,就是false
public class sbian
{
public static void main(String[] srgs){
int a=10;
int b=10;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a>=b);
System.out.println(a<=b);
System.out.println(a==b);
System.out.println(a!=b);
}
}
逻辑运算符
逻辑运算符两边的操作数要求是布尔类型,结果也是布尔类型。
& (与): true&true ,结果是true,只要有一个false,结果就是false
| (或): true&false 结果是true,只要有一个true,结果就是true,只有两边都是false,结果才是false
!(非): true&false 结果是true,只要两边不一样,结果就是ture
^(异或): !true结果是false,!false结果是true
&&(短路与):和(与)运算结果完全相同,但存在短路现象(左边如果是false,不执行右边),效率更高
||(短路或):和(非)运算结果完全相同,但存在短路现象(左边如果是true,不执行右边),效率更高
按位运算符
按位运算符的操作数要求必须是整数,否则会出现编译错误。任何位运算符操作的都是补码。
左移:<<
能够将一个二进制数的所有位向左移动指定的位数,规则如下:
将二进制数左移n位,相当于将数值乘以2的n次方
左移运算符不会改变操作数的符号。左移后,右补0
左移运算符会对溢出进行截断
右移:>>
能够将一个二进制数的所有位向右移动指定的位数,规则如下:
将二进制数右移n位,相当于将数值除以2的n次方
右移运算符对正数、负数和零的处理方式不同
正数,符号位不变,右移时左补0
负数,符号位不变,右移时左补1
零,右移运算符操作后仍然为零
无符号右移:>>>
能够将一个二进制数的所有位向右移动指定的位数,而不考虑符号位,规则如下:
将二进制右移n位,相当于将数值除以2的n次方,并且将最高位补0(不论正负)
任何一个数字经过不符合右移后,最终结果一定是0或者正整数
按位与:&
将两个整数的二进制表示按位进行与运算,只有当相应的二进位都为1时,结果为1,否则为0
int a=32; //00100000
ina b=25; //00011001
System.out.println(a&b); //与运算后:00000000 即0
可以用于判断奇数:
与1相与,结果不等于0,则为奇数(用与)
对2取模,结果不等于0,则为技术(不用与)
按位或:|
将两个整数的二进制表示按位进行与运算,只有当相应的二进位都为0时,结果为0,否则为1
应用:将某个二进制位设置为1
将0这个数字第4位的二进制位设置为1
int flag=0;
flag=flag|(1<<3);
按位异或:^
将两个整数的二进制表示按位进行异或运算,只有当相应的二进制位不同时,结果才为1,否则为0
按位异或运算符具有自反性,即A对B连续进行两次按位异或后,得到原始的A。常用于密码学
应用:按位异或运算可以实现简单的加密或解密
public class mima{
public static void main(String[] args){
int data=2147483647; //原始数据,将来要进行加密
int key=483; //对data加密,密匙,私人的
//加密
int password=data^key;
System.out.println(password);
//解密
int num=password^ksy;
System.out.println(num);
}
}
按位取反:~
将整数的二进制表示按位进行取反运算,即0变1,1变0.
应用:位清楚操作,将二进制中的一个指定位清除为0。
eg://将0b01101101第二个低位清除为0
int value=0b01101101;
//00000000 00000000 00000000 00001000
int flag=1<<3; //需清除第4个低位
// 11111111 11111111 11111111 11110111(取反)
//& 00000000 00000000 00000011 11111111
//----------------------------------------
// 00000000 00000000 00000011 11110111
int result=value&(~flag);
System.out.println(value);