和C语言类似不过多赘述
运算符、表达式、语句
运算符(位运算符)
若一个 int 型变量在内存中占4个字节 32位
7 的二进制表示:00000000 00000000 00000000 00000111
左边最高位:符号位
符号位 为0:正数 为1:负数
负数:补码表示
计算补码方法: -1 为例(符号位始终保持不变)
原码:
10000000 00000000 00000000 00000001
反码:
11111111 11111111 11111111 11111110
反码+1:
11111111 11111111 11111111 11111111
补码:
11111111 11111111 11111111 11111111
正数的反码 补码 原码都相同
计算7-6
-6原码:
10000000 00000000 00000000 00000110
-6反码:
11111111 11111111 11111111 11111001
-6反码+1:
11111111 11111111 11111111 11111010
-6补码:
11111111 11111111 11111111 11111010
7的补码:
00000000 00000000 00000000 00000111
-6的补码:
11111111 11111111 11111111 11111010
+7+(-6):(最高位进位省略)
00000000 00000000 00000000 00000001
结果为1
按位与运算 &
运算法则:a,b两个数据对应位都是1,则结果为1,否则为0
a = 7 , b = -8
-8原码:
10000000 00000000 00000000 00001000
-8反码:
11111111 11111111 11111111 11110111
-8反码+1:
11111111 11111111 11111111 11111000
-8补码:
11111111 11111111 11111111 11111000
a: 00000000 00000000 00000000 00000111
&b: 11111111 11111111 11111111 11111000
c: 00000000 00000000 00000000 00000000
按位或运算 |
运算法则:a,b两个数据对应位都是0,则结果为0,否则为1
按位非运算 ~
运算法则:a对应位是1,则结果为0,a对应位是0,则结果为1
按位异或运算 ^
运算法则:a,b两个数据对应位相同,则结果为0,否则为1
a^a=0
a^0=a
package jiami;
public class JiaMi {
public static void main(String[] args) {
char a1 = '我',a2 = '爱',a3 = '你';
char secret = 'A';
a1 = (char)(a1^secret);
a2 = (char)(a2^secret);
a3 = (char)(a3^secret);
System.out.println("密文:"+a1+a2+a3);
a1 = (char)(a1^secret);
a2 = (char)(a2^secret);
a3 = (char)(a3^secret);
System.out.println("原文:"+a1+a2+a3);
}
}