赞
踩
目录
1.运算:对常量和变量进行操作的过程叫做运算;
2.运算符:对常量和变量进行操作的符号称作运算符;
3.操作数:参与运算的数据;
4.表达式:用运算符把常量或者变量连接起来符号并且符合java语法的式子就可以称为表达式。 不同运算符连接的式子体现的是不同类型的表达式;
5.算术运算符:+,-,*,/,%,++,--。
6.各种运算符的优先级:
赋值运算符: = , +=, -=, *=, /=, %= 。其中我们一直在使用的也是最常用的:=
、 例子①:
- public class OptFuZhiDemo1 {
- public static void main(String[] args) {
- // int a = 10;
- // int b = a;
- // System.out.println(a);
- // System.out.println(b);
-
- // +=
- // int a += 10;
- int a = 10;
- a += 20; //这里实际上可以看作为a的值加上了一个20再赋值给a,但是不能完全等于 a = a + 20;
- System.out.println(a);
-
- //-=
- a-=10;
- System.out.println(a); //20
-
- //*=
- a*=2;
- System.out.println(a); //40
-
- // /=
- a/=2;
- System.out.println(a); //20
-
- // %=
- a%=3;
- System.out.println(a); //2
-
-
- }
- }
例子②
- /*
- short s=1, s = s+1;
- short s=1, s += 1;
- 上面两个代码有没有问题,如果有,那里有问题
- 第一个有问题,因为变量参与运算,首先会提升数据类型,然后做运算。所以 s = s+1;s会提升到int类型然后再做加法运算,最终的
- 结果是int类型,所以拿short类型接收会报错,所以要想成功赋值,就得强制类型转换。
-
- 第二个代码没有问题,是因为内部自动包含了强制类型转换,s+=1 ===> s = (s的数据类型)(s+1)
-
-
- */
- public class OptFuZhiDemo2 {
- public static void main(String[] args) {
- // short s = 1;
- // s = (short)(s + 1);
-
- short s = 1;
- s+=1;
- System.out.println(s);
- }
- }
常见的关系运算符有 ==,!=,>,<,>=,<=。
注意事项:①关系运算符的表达式的结果是一个boolean类型,要么是true,要么是false;
②==不能少写,一个=是赋值运算符,==才是关系运算符;
③赋值的时候要注意类型问题,关系运算符表达式的结果是boolean类型,所以接收的时候只能是boolean类型的变量接收。
- public class OptGuanXiDemo1 {
- public static void main(String[] args) {
- int a = 3;
- int b = 9;
- boolean flag = (a == b);
- // int flag2 = (a == b);
- System.out.println(flag);
-
- //!=
- System.out.println(a != b);
-
- //>
- System.out.println(a>b);
-
- //<
- System.out.println(a<b);
-
- //>=
- a = 4;
- System.out.println(a>=b);
-
- //<=
- System.out.println(a<=b);
-
- System.out.println(a==b);
- System.out.println(a=b);
- }
- }
①&,|,^,!,&&,||
②逻辑运算符的两边放的是boolean类型的值,计算的结果也是一个boolean类型的值
&: 参与运算的时候,两边有false,则false,两边都做运算
|: 参与运算的时候,两边有true,则true,两边都做运算
^: 参与运算的时候,相同为false,不同为true,两边都做运算
!: 将true变成false,false变成true
- public class OptLogicDemo1 {
- public static void main(String[] args) {
- // int a = 3;
- // int b = 4;
- // System.out.println(a&b);
-
- int a = 3;
- int b = 4;
-
- // &
- // System.out.println((a++ == 3) & (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 4) & (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 3) & (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 4) & (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
-
-
- // |
- // System.out.println((a++ == 3) | (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 4) | (b++ == 4)); //左边是false,右边是true,结果是true,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 3) | (b++ == 5)); //左边是true,右边是false,结果是true,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 4) | (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
-
- // ^
- // System.out.println((a++ == 3) ^ (b++ == 4)); //左边true,右边也是true,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 4) ^ (b++ == 4)); //左边是false,右边是true,结果是true,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 3) ^ (b++ == 5)); //左边是true,右边是false,结果是true,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 4) ^ (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
-
- // !
- System.out.println(!((a++ == 4) ^ (b++ == 5)));
-
-
- }
- }
&&: 短路与,结果和单个与结果一样,有false则false,但是执行的东西不一样, 当&&左边的表达式结果为false的时候,结果是false,右边不执行 ;
||: 短路或,结果和单个或结果一样,有true则true,但是执行的东西不一样, 当||左边是true的时候,右边不执行,结果是true.
( 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6。)
- public class OptLogicDemo2 {
- public static void main(String[] args) {
- int a = 3;
- int b = 4;
-
- // &
- // System.out.println((a++ == 3) & (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 4) & (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 3) & (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b); // 4,5
- // System.out.println((a++ == 4) & (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b); //
-
- System.out.println("====================================================================");
- a = 3;
- b = 4;
- // &&
- // System.out.println((a++ == 3) && (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 4) && (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b); //a:4,b:4
- // System.out.println((a++ == 3) && (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b);
- // System.out.println((a++ == 4) && (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b); //a:4,b:4
- System.out.println("====================================================================");
- a = 3;
- b = 4;
- // |
- System.out.println((a++ == 3) | (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
- System.out.println("a:" + a + ",b:" + b);
- System.out.println((a++ == 4) | (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
- System.out.println("a:" + a + ",b:" + b); //a:4,b:4
- System.out.println((a++ == 3) | (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
- System.out.println("a:" + a + ",b:" + b);
- System.out.println((a++ == 4) | (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
- System.out.println("a:" + a + ",b:" + b); //a:4,b:4
- System.out.println("====================================================================");
- a = 3;
- b = 4;
- // ||
- // System.out.println((a++ == 3) || (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
- // System.out.println("a:" + a + ",b:" + b); //a:4,b:4
- // System.out.println((a++ == 4) || (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b); //a:4,b:5
- // System.out.println((a++ == 3) || (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b); //a:4,b:4
- // System.out.println((a++ == 4) || (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
- // System.out.println("a:" + a + ",b:" + b); //a:4,b:5
-
- //java不支持连续比较
- // System.out.println(20>a>10);
- System.out.println((a<20 & a>10));
-
- }
- }
格式:(关系表达式)?表达式1:表达式2;
如果关系表达式的结果为true,运算后的结果是表达式1;
如果关系表达式的结果为false,运算后的结果是表达式2;
注意事项: 1、三目运算符表达式的结果数据类型由三目运算符表达式1和表达式2中最大的数据类型决定的。 2、关系表达式一定只能是boolean类型
- public class OptSanMuDemo1 {
- public static void main(String[] args) {
- //求出a,b中的最大值
- int a = 10;
- int b = 30;
- //三目运算符解决
- int c = (a>b)?a:b;
-
- //面试题:int a = 20;double b = 30.0;(a>b)?a:b
- int a1 = 20;
- double b1 = 30.0;
- double c1 = (a1>b1)?a1:b1;
- System.out.println(c1);
-
-
- }
- }
位运算符:<<,>>,>>>,&,|,^,~
- public class OptWeiDemo1 {
- public static void main(String[] args) {
- byte a = 3;
- byte b = 4;
- System.out.println(a&b);
- System.out.println(a|b);
- System.out.println(a^b);
- System.out.println(~a); //-4
- }
- }
- /*
- 由于数据在计算机中参与运算的都是补码,而想要知道补码,就得知道反码,原码,就得求出二进制
- 3的二进制:00000011
- 4的二进制:00000100
- 又由于3和4都是正数
- 3的补码:00000011
- 4的补码:00000100
-
- & 运算:有0则0
- 00000011
- &
- 00000100
- ---------------
- 00000000
-
- 结果是 : 0
-
- ====================================
-
- | 运算:有1则1
- 00000011
- |
- 00000100
- --------------
- 00000111
-
- 结果是:7
-
- ====================================
-
- ^ 运算:相同则0,不同则1
- 00000011
- ^
- 00000100
- --------------
- 00000111
-
- 结果是:7
-
- ====================================
-
- ~ 运算:1变成0,0变成1
- 00000011
- ~
- -------------
- 补码: 11111100
- 已知补码求原码:
- 反码: 11111011
- 原码: 10000100
-
- 结果是:-4
-
- */
特别:
位运算符: <<: 左移,二进制左移,右边用0补齐,多出来的丢弃
>>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。 >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
- public class OptWeiDemo2 {
- public static void main(String[] args) {
- System.out.println(3<<2); //12 = 3*4 = 3*2^2
- System.out.println(24>>2); //6 = 24/(2*2)
- System.out.println(-24>>2);// -6
- System.out.println(-24>>>2);//1073741818
- System.out.println(3<<3); // 3*2^3
-
-
- //请用最有效率的方式写出计算2乘以8的结果
- // System.out.println(2*8);
- System.out.println(2<<3);
- }
- }
-
- /*
- <<: 左移,二进制左移,右边用0补齐
- 3的二进制:00000000 00000000 00000000 00000011
- 由于3是正数,所以原码,反码,补码都一样
- 3的补码:00000000 00000000 00000000 00000011
- 左移:
- 00000000 00000000 00000000 00000011
- (00)00000000 00000000 00000000 00001100 (补码)
- 由于最高位是0,既是补码也是原码,所以结果是: 12
-
- ================================================================
- >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
- 24的二进制:00000000 00000000 00000000 00011000
- 由于24是正数,所以原码,反码,补码都一样
- 24的补码:00000000 00000000 00000000 00011000
- 右移:
- 00000000 00000000 00000000 00011000
- 0000000000 00000000 00000000 000110(00) (补码)
- 由于最高位是0,既是补码也是原码,所以结果是:6
-
- ================================================================
- >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
- -24的二进制:10000000 00000000 00000000 00011000
- 已知原码求补码:
- 原码:10000000 00000000 00000000 00011000
- 反码:11111111 11111111 11111111 11100111
- 补码:11111111 11111111 11111111 11101000
- 右移:
- 11111111 11111111 11111111 11101000
- 1111111111 11111111 11111111 111010(00) (补码)
- 已知补码求原码:
- 补码:11111111 11111111 11111111 11111010
- 反码:11111111 11111111 11111111 11111001
- 原码:10000000 00000000 00000000 00000110
- 最终结果是:-6
-
- ==============================================================
- >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
- -24的二进制:10000000 00000000 00000000 00011000
- 已知原码求补码:
- 原码:10000000 00000000 00000000 00011000
- 反码:11111111 11111111 11111111 11100111
- 补码:11111111 11111111 11111111 11101000
- 无符号右移2位:
- 11111111 11111111 11111111 11101000
- 0011111111 11111111 11111111 111010(00) (补码)
- 由于最高位是0,所以它的原码,反码,补码都是一样的。
- 最终结果位:0011111111 11111111 11111111 111010 = 1073741818
-
-
- */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。