Java学习笔记day9(关系运算符/逻辑运算符/按位运算符)

关系运算符

又称比较运算符。> < >= <=  == !=

所有关系运算符的运算结果都是布尔类型,不是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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值