书接上文, Java为什么在主方法里有参数?
当用 javac (Java编译器)去编译Java源文件时,方便在执行时传递一些参数
正文:
位运算符
一共四个: 与(&),或(|),非(~),异或(^)
位运算符 | 运算规则 |
---|---|
与(&) | 全1为1,否则为0 |
或(一个短竖,我这个编辑器打不出来) | 全0为0,否则为1 |
非(~) | 0变1,1变0 |
异或(^) | 相同为0,不同为1 |
EG:
1.异或的应用
2^3
00000001
^
00000011
得00000010
异或加密算法
//异或加密算法
package com.hzyc.demo;
public class XorEncryptionAlgorithm {
public static void main(String[] args) {
char c1='十';
char c2='点';
char c3='进';
char c4='攻';
char screct = '8';
char m1=(char)(c1 ^ screct);
char m2=(char)(c2 ^ screct);
char m3=(char)(c3 ^ screct);
char m4=(char)(c4 ^ screct);
System.out.println(m1);
System.out.println(m2);
System.out.println(m3);
System.out.println(m4);
char r1=(char)(m1 ^ screct);
char r2=(char)(m2 ^ screct);
char r3=(char)(m3 ^ screct);
char r4=(char)(m4 ^ screct);
System.out.println(r1);
System.out.println(r2);
System.out.println(r3);
System.out.println(r4);
}
}
//非常简单,对一个数做两次异或运算,最后得到的还是原来的数
使用异或将两个数交换位置
package cust.cs.algorithm;
public class XorExchange {
public static void main(String[] args) {
int a=2;
int b=3;
a^=b;//第一步
System.out.println("b= "+(b^=a));
System.out.println("a= "+(a^=b));
}
}
2.位运算时,"非"的内部实现
~3=-4
3的原码: 00000011
转换为补码: 11111100
11111100-1=11111011
取反: 10000100 //符号位不变
~3 = -4
//就是原码变补码的逆运算
逻辑运算符
与(&&) , 或(||) , 非 (!)
逻辑运算符只能对boolean类型进行运算
逻辑运算与位运算的区别
1. 逻辑运算符只能针对boolean类型进行逻辑运算,而位运算还可以对数值进行逻辑运算。
*2. 逻辑运算符有短路情况,即前面的表达式可以得到最终结果时,后面的表达式将不被执行*
int aa = 10;
int bb = 10;
if( (aa = 0) ==0 | (bb = 20) == 20 ) {
System.out.println("bb的值是"+bb);
}
//结果为 : 20
if( (aa = 0) ==0 || (bb = 20) == 20 ) {
System.out.println("bb的值是"+bb);
}
//结果为 : 10
int aa=10;
int bb=10;
if((aa=0)==34&&(bb=28)==28) {//can`t print
System.out.println(bb);
}
//结果不会被打印,因为短路与的第一个条件不成立
3.位移运算符
右移: >> 相当于除2
左移: <<相当于乘2
System.out.println(4>>1);//2
System.out.println(4<<1);//8