【java笔记】day05

位运算符

它是操做二进制位的。

&(与)

他是把运算的两个数分别转换成二进制,然后把二进制的每一位一一对应的进行逻辑与运算,然后在将二进制结果转换成十进制返回给我们。

System.out.println(6&3);

结果:2
分析:
6>>>110
3>>>011
做与运算。结果是010,转换成十进制,是2。

练习:取出二进制数的低4位数。

00000000-00000000-00000000-01010100
答:使用与运算,原数与一个后四位为1,其他全为0的数即可。

|(或)

他是把运算的两个数分别转换成二进制,然后把二进制的每一位一一对应的进行逻辑或运算,然后在将二进制结果转换成十进制返回给我们。

^(异或)

他是把运算的两个数分别转换成二进制,然后把二进制的每一位一一对应的进行异或运算,然后在将二进制结果转换成十进制返回给我们。
注意:一个操作数,连续两次异或同一个数,结果不变。
老师似乎说了可以用来加密文件。

练习:要求:交换两个变量值,不允许使用第三个变量。(a=3,b=5)

方法一

int a = 3;
int b = 5;
a = a + b; //a == 8
b = a - b; // b == 8 - 5;
a = a - b; // a == 8 - 3;

缺点:如果长度超出数据类型范围,编译就会出错。
方法二

int a=3;
int b=5;
a = a ^ b; //a == 3 ^ 5;
b = a ^ b; //b == (3 ^ 5) ^ 5;
a = a ^ b; //a=5;
~(取反)

把要取反的数转化成二进制,然后进行取反运算,在转回十进制。

移位运算符

也是位运算符的一种。
1,左移(<<)
计算机会先将操作数转换成二进制,然后把这个二进制整体向左移动n为,n是运算符右边的数,空位补零。
规律:左移后的数是这个操作数乘以2的n次方,n是移动的位数。

System.out.println(3<<1);   //结果为6 
                //3 * 2(1) = 6;  
System.out.println(3<<2);   //结果为12
                //3 * 2(2) = 12;
System.out.println(3<<3);   //结果为24
                //3 * 2(3) = 24;

2,右移(<<)
计算机会先将操作数转换成二进制,然后把这个二进制整体向右移动n为,n是运算符右边的数。
要注意这个数的正负性,如果是负数的话,右移后再首位补1,正数补0。
规律:左移后的数是这个操作数除以2的n次方,n是移动的位数。

System.out.println(3>>1);   // 结果为1
                //3 / 2(1) = 1;
System.out.println(3>>2);   // 结果为0
                //3 / 2(2) = 0; 
System.out.println(3>>3);   //结果为 0
                //3 / 2(3) = 0;

3,无符号右移(>>>)
不管是否为正数负数,都是直接右移,补零(负数也补0)。

练习:最高效率的算出2*8的值。

答案:2<<3

三目运算符

格式:表达式?值1:值2
注意:通过三目运算符的刀的结果必须使用,如果不使用就必须用一个变量接受它。

int age = 16;
System.out.println(age > 18 ? "成年人" : "未成年人");

结果:未成年人

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值