-
运算符的分类:
* 1、赋值运算符 =
* 2、算术运算符 + - * / %(模) ++ –
* 3、复合运算符 += -= *= /= %=
* 4、关系运算符 > >= < <= == !=
* 5、逻辑运算符 && || !
* 6、位运算符 & | ~ ^ << >>
* 7、三目运算符 ?:
* *///1、赋值运算符 = //作用是把等号右边的值,赋值给左边的变量。 //左边一定是变量。 /*int a = 5;//定义变量a,a的类型是int。把5赋值给a。 //此次此刻a存放的值是5,我们称:a的值是5 a = 100;//把100赋值给a,此时a是100。 a = a + 20;//a变成了120 System.out.println(a); int b = 50; a = a + b;//a变成了170 System.out.println(a); //2、算术运算符 + - * / %(模) ++ -- int m = 12; int n = 8; int sum = m + n; int result = m - n; int res = m * n; res = m / n;//注意:整数与整数相除,结果取整(抹掉小数部分) //除法里,除数不能为0 //res = m / 0; System.out.println(sum); System.out.println(result); System.out.println(res); int x = 100; double b10 = 4; b10 = x / b10; System.out.println(b10);*/ /*//%用于求余数。 int a1 = 15; int b1 = 4; int c = a1 % b1; int d = a1 / b1; System.out.println(c); System.out.println(d); float e1 = 13.5f; float f1 = e1 % b1; System.out.println(f1); //求余数的时候,余数始终与被除数符号一致。 int x1 = -8; int y1 = 5; int z1 = x1 % y1; System.out.println(z1);*/ // ++ 自增运算符 int num = 10;
// num++;//等价于num = num + 1;
// ++num;//等价于num = num + 1;
int num2 = 10;
int x = num–;//num = num + 1;
//int x = num++;
//等价于 int x = num;
// num = num + 1;
int y = --num2;//num2 = num2 + 1;
//int y = ++num2;
//等价于 num2 = num2 + 1;
//int y = num2;
//++在变量前面,先增1,再使用便令。
//++在变量后面,先使用变量,在增1
System.out.println(num);
System.out.println(num2);
System.out.println(x);
System.out.println(y);
// 复合运算符 += -= *= /= %=
/*int number1 = 10;
int number2 = 3;
int result = 0;
result += number1;
//等价于 result = result + number1;
result -= number2;
//等价于 result = result - number2;
result *= number2;
//等价于 result = result * number2;
result /= number1;
//等价于 result = result / number1;
result %= number2;
//等价于 result = result % number2;
System.out.println(result);*/
//4、关系运算符 > >= < <= == !=
//关系运算符的运算结果一定是一个boolean
// int x = 3;
// int y = 5;
// boolean a = x != y;
// System.out.println(a);
// 5、逻辑运算符 && || !
//&& 逻辑与 表示并且,用来连接2个表达式。
//&&两侧的表达式都为真的时候,结果才为真。
//只要有一个表达式是假,结构就是假。
//注意事项:一旦发现&&前面的表达式为假了
//就不再计算后面的表达式了
//这个现象称为短路现象。
/int a = 10;
int b = 8;
int c = 12;
// boolean result = a >= b && a >= c;
//a >= b true
//a >= c false
boolean result = a >= c && (a++)==10;
System.out.println(result);
System.out.println(a);/
//|| 逻辑或 表示或者。
//||左侧或者右侧有一个为true结果就是true。
//只有在2者都是false的时候才为false。
//如果 || 左侧的表达式为true,就不再计算||右侧的表达式了。
int a = 10;
int b = 8;
int c = 12;
//boolean result = a > c || a > b;
boolean result = a >= b || (a++)==10;
System.out.println(result);
System.out.println(a);
//! 逻辑非。作用就是取反。!右侧是一个表达式。
//如果表达式值是true,整个表达式的结果就是false
boolean h = !(a > b);
System.out.println(h);
// 6、位运算符 & | ~ ^ << >>
int m = 8;
int n = 5;
int q = -5;
int r = m & n;
System.out.println®;
//8 0000 0000 0000 0000 0000 0000 0000 1000
//原 0000 0000 0000 0000 0000 0000 0000 1000
//反 0000 0000 0000 0000 0000 0000 0000 1000
//补 0000 0000 0000 0000 0000 0000 0000 1000
//5 0000 0000 0000 0000 0000 0000 0000 0101
//-5 1000 0000 0000 0000 0000 0000 0000 0101
//原 1000 0000 0000 0000 0000 0000 0000 0101
//反 1111 1111 1111 1111 1111 1111 1111 1010
//补 1111 1111 1111 1111 1111 1111 1111 1011
//机器码 最高位是符号位 0表示整数 1表示负数
//真值:真正的值,带正负号。是10进制数。
//原码(机器码)
//反码:正数的反码与原码相同,负数的反码:符号位不变,其他位取反。
//补码:正数的补码与原码相同,负数的补码:反码+1
//在内存里,整数都是按补码存放的。
//& 按位与。 &左右两侧是2个整数。
//计算规则,先把2个数转化位二进制(补码)。
//再按位与。相同位置的数都是1结果才是1,有一个是0,结果就是0
System.out.println(8&5);
// 0000 0000 0000 0000 0000 0000 0000 1000
//& 0000 0000 0000 0000 0000 0000 0000 0101
// 0000 0000 0000 0000 0000 0000 0000 0000
System.out.println(8&-5);
// 0000 0000 0000 0000 0000 0000 0000 1000
//& 1111 1111 1111 1111 1111 1111 1111 1011
// 0000 0000 0000 0000 0000 0000 0000 1000
//| 按位或。 |左右两侧是2个整数。
//计算规则,先把2个数转化位二进制(补码)。
//再按位或。相同位置的数都是0结果才是0,有一个是1,结果就是1
System.out.println(8|5);
// 0000 0000 0000 0000 0000 0000 0000 1000
//| 0000 0000 0000 0000 0000 0000 0000 0101
// 0000 0000 0000 0000 0000 0000 0000 1101
System.out.println(8|-5);
// 0000 0000 0000 0000 0000 0000 0000 1000
//| 1111 1111 1111 1111 1111 1111 1111 1011
// 1111 1111 1111 1111 1111 1111 1111 1011(补)
// 1111 1111 1111 1111 1111 1111 1111 1010(反)
// 1000 0000 0000 0000 0000 0000 0000 0101(原)
//
//~按位取反。以前是0变成1,以前是1变成0.
//也是先找补码,对补码取反。
//~8
// 0000 0000 0000 0000 0000 0000 0000 1000
// 1111 1111 1111 1111 1111 1111 1111 0111(补)
// 1111 1111 1111 1111 1111 1111 1111 0110(反)
// 1000 0000 0000 0000 0000 0000 0000 1001(原)
// -9
System.out.println(~8);
//~-5
// 1111 1111 1111 1111 1111 1111 1111 1011(补)
//~ 0000 0000 0000 0000 0000 0000 0000 0100(补)
// 0000 0000 0000 0000 0000 0000 0000 0100(反)
// 4
System.out.println(~-5);
// 取非的快速公式:~A = -(A+1);
// ^ 左右2侧是2个整数。也是先转换为二进制(补码)。
// 相同位置的数,相同为0,不同为1.
//8 0000 0000 0000 0000 0000 0000 0000 1000
//5 ^ 0000 0000 0000 0000 0000 0000 0000 0101
// 0000 0000 0000 0000 0000 0000 0000 1101
// 13
System.out.println(8^5);
// 数 << n位。<< 左侧是你要移动的数,右侧是要移动多少位。
//8 0000 0000 0000 0000 0000 0000 0000 1000
// 8<<3
// 0000 0000 0000 0000 0000 0000 0000 1000
// 0000 0000 0000 0000 0000 0000 0100 0000
// 64
// 左移几位相当于乘以2的几次方。
// 8 * 2^3
// 数 >> n位。>> 左侧是你要移动的数,右侧是要移动多少位。
//8 0000 0000 0000 0000 0000 0000 0000 1000
// 8>>2
// 0000 0000 0000 0000 0000 0000 0000 1000
// 0000 0000 0000 0000 0000 0000 0000 0010
// 2
// 右移几位相当于除以2的几次方。
// 8 / 2^2