一、&:按位与,俩个都是1才为1。
|:按位或,只要有一个是1就是1。
^:异或,俩数不同位1,一个数和另一个数异或俩次还是它自己(一个数和它自身异或等于0,一个数和0异或等于它自己),多应用于加密解密。
例:int a=10;
int b=6;
a=a^b; //a=(a^b),
b=a^b; //b=a^b^b=10^6^6=10
a=a^b; //a=a^b^b=10^6^10=6
System.out.println(a);
System.out.println(b);
输出a=6,b=10
~:按位取反:0变成1,1变成0。
>>:右移,公式 a/2^n(n是右移的位数),正数右移,最高位补0,最小值0;负数右移,最高位补1,最小值-1。右移时,余数不可以是负数。右移周期0--31。
<<:左移,公式a*2^n(n是左移的位数),左移后面补0,不论正负数最后 都移成0,左移周期0--31。
>>> 无符号右移:负数右移一位都变成正数,最高位补0。
二、负数的二进制等于正数取反加一,-a=~a+1 -a+(-1)=~a。
三、指令:i++先赋值=0, 再加一,再赋值=0。
1.class BitDemo{
public static void main(String[] args){
int i=0;
int c=i++;
System.out.println(i);
System.out.println(c);
// 将0放到栈顶
// istore_1 将栈顶的元素赋值给第二个局部变量 i=0;
// iload_1 将第二个局部变量的值放到栈顶 0
// iinc 1,1 i=1;
// istore_2 将栈顶的元素赋值给第三个局部变量c=0;
// System.out.println(iload_1); i=1;
// iload_1 第二个局部变量
//System.out.println(iload_2);
// iload_2
}
}
2.class BitDemo10{
public static void main(String[] args){
// 第一个局部变量是args
//show();
int i=0;
i=i++;
System.out.println(i);
//iconst_0 将0放到栈顶
//istore_1 将int值存到第二个局部变量中 i=0;
// iload_1 将第二个局部变量的值放到栈顶 0
// iinc i=1;
//istore_1 将栈顶的元素给第二个局部变量i=0;
}
}