原码,反码,补码:
对有符号的而言:
1:二进制的最高位是符号位:0代表正数,1代表负数。
2:正数三码合一。
3:负数的反码 = 原码符号位不变,其它位取反。
4:负数的补码 = 反码 + 1 , 负数的反码 = 补码 - 1。
5:0 的反码补码都是0。
6:java所有数都是有符号的。
7:计算机以补码运算。
8:看运算结果时,要看原码。
位运算符
按位与 & : 两位全为1,结果为1,否则为0
按位或 | : 两者有一个为1 ,结果为1,否则为0
按位异或 ^ : 互异为1 , 否则为 0
按位取反 : 0->1 , 1->0
算术右移>> : 低位溢出 符号位不变 并用符号位补溢出的高位
算术左移<< : 符号位不变 低位补0
逻辑右移>>> : 无符号右移 低位溢出 高位补0
int a = 1 >> 2 : 00000001 => 00000000 = 0 1/2/2
int a = 1 << 2 : 00000001 <= 00000100 = 4 1*2*2
逻辑运算符
&& || 先左后右 效率高
Java运算符的优先级:
三元运算符
a ?b : c
当 a 为 True,c 不执行
public class Main {
public static void main(String[] args) {
int a = 10, b = 99;
int result = a < b ? a++ : b--;
System.out.println(a);
System.out.println(b);
System.out.println(result);
思考这个类型转换的报错:
int c = a > b ? 1.1 :3.4;
数制转换
16 -> 10
0X23A = 10 * 16^0 + 3 * 16^1 +2* 16^2
10 -> 2
/ 2 取余
10 -> 8
/ 8 取余
2 -> 8
0b11_010_101
0 3 2 5
低位3个一组
2 -> 16
ob_1101_0101
0 D 5
低位4个一组
8 -> 2
0237
每个数对应的2进制
16 -> 2
0X23B
0010_0011_1011