运算符

运算符

  • 算术运算符:+,-,*,/,%,++,--

    操作符描述例子 A=10 B=20
    +加法 - 相加运算符两侧的值A + B 等于 30
    -减法 - 左操作数减去右操作数A – B 等于 -10
    *乘法 - 相乘操作符两侧的值A * B等于200
    /除法 - 左操作数除以右操作数B / A等于2
    %取余 - 左操作数除以右操作数的余数B%A等于0
    ++自增: 操作数的值增加1B++ 或 ++B 等于 21(区别详见下文)
    --自减: 操作数的值减少1B-- 或 --B 等于 19(区别详见下文)

     

//二元运算符
int a = 10;
int b = 20;
int c = 25;
int d = 25;

System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b % a = " + (b % a) );//% 取余 模运算
System.out.println("c % a = " + (c % a) );//% 取余 模运算
System.out.println("a % b = " + a/b); //int 0.5 = 0
System.out.println("a % (double)b = " + a/(double)b); //double 0.5 = 0.5

后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算 

int b = a++ =====> b = a     a = a + 1

前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。

int c = ++a =====> a = a + 1    c = a

//++ -- 自增 自减 一元运算符
int a = 3;

int b = a++;//执行这行代码后 先赋值 再自增 相当于在这行代码后面隐藏 a = a + 1
//a = a + 1
System.out.println("先赋值,再自增"+"a="+a+"b="+b);
//a = a + 1
int c = ++a;//执行这行代码前 先自增 再赋值 相当于在这行代码前面隐藏 a = a + 1
System.out.println("先自增,再赋值"+"a="+a+"c="+c);

  • 关系运算符:>,<,>=,<=,==,!=

//关系运算符 返回结果 布尔值 true false
int a = 10;
int b = 20;

System.out.println("a>b:"+(a>b));
System.out.println("a<b:"+(a<b));
System.out.println("a>=b:"+(a>=b));
System.out.println("a<=b:"+(a<=b));
System.out.println("a==b:"+(a==b));
System.out.println("a!=b:"+(a!=b));

  • 逻辑运算符:&&,||,!

操作符描述例子 A=true B = false
&&逻辑与运算符 - 当且仅当两个操作数都为真,条件才为真。(A&&B)为假
||逻辑或运算符 - 如果任何两个操作数任何一个为真,条件为真。(A || B)为真
逻辑非运算符 - 用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A&&B)为真
 //逻辑运算符 与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;

System.out.println("a&&b:"+ (a&&b));//逻辑与运算 两个变量都为真 结果为true
System.out.println("a||b:"+(a||b));//逻辑或运算 两个变量有一个为真 结果为true
System.out.println("!(a&&b):"+!(a&&b));//结果为真 变为假 结果为假 变为真

短路逻辑运算符

当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。

 //短路与运算 前面为false 后面不执行
int c = 5;
boolean d = (c<4)&&(c++<4);//如果c++<4执行 c变为6
System.out.println(d);
System.out.println("c="+c);

当使用与逻辑或算符时,在两个操作数都为flase时,结果才为flase,但是当得到第一个操作为true时,其结果就必定是true,这时候就不会再判断第二个操作了。

//短路或运算 前面为true 后面不执行
int c = 5;
boolean d = (c<6)||(c++<4);//如果e++<4执行 e变为4
System.out.println(d);
System.out.println("c="+c);

  • 位运算符:&,|,^,~,>>,<<,>>>

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。

位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:

A = 0011 1100
B = 0011 1100
 
A&B = 0000 1100 与 全1为1
A|B = 0011 1101 或 全0为0
A^B = 0011 0001 异或 相同为0 不同为1
~A = 1100 0011 非 0变1 1变0
操作符描述例子 A = 0011 1100 B = 0011 1100
&与 - 如果相对应位都是1,则结果为1,否则为0(A&B)得到12,即0000 1100
|或 - 如果相对应位都是 0,则结果为 0,否则为 1(A | B)得到61     即 0011 1101
^异或 - 如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49     即 0011 0001
~非 - 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。(〜A)得到-61      即 1100 0011
>>左移 - 按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2得到240    即 1111 0000
<<右移 - 按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15      即 0000 1111
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15      即 0000 1111

 

面试题:2*8 怎样计算最快?

2*8 = 2*2*2*2

0000 0000 0

0000 0001 1

0000 0010 2

0000 0011 3

0000 0100 4

0000 1000 8

0001 0000 16

从上面可以看出 左移就是把数字*2 右移就是把数字/2 

2的二进制在存储器里面是 0000 0010
左移三位后变成0001 0000 也就是16

在系统中运算是以二进制的形式进行的。相比来说俩个二进制数相乘运算比移位运算慢一些。
位操作是程序设计中对位模式按位或二进制数的一元和二元操作。 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多。
 

  • 条件运算符:?:

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量

//三元运算符 条件运算符
//x ? y : z
//如果x为真 执行y 否则执行z
int grade = 80;
String result = grade>60?"及格":"不及格";
System.out.println(result);
String result2 = grade>90?"及格":"不及格";
System.out.println(result2);

  • 赋值运算符:=,+=,-=,*=,/=,(%)=,<<=,>>=,&=,^=,|=

操作符描述例子
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A等价于C = C + A
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A等价于C = C - A
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C * = A等价于C = C * A
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A,C 与 A 同类型时等价于 C = C / A
(%)=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C%= A等价于C = C%A
<< =左移位赋值运算符C << = 2等价于C = C << 2
>> =右移位赋值运算符C >> = 2等价于C = C >> 2
&=按位与赋值运算符C&= 2等价于C = C&2
^ =按位异或赋值操作符C ^ = 2等价于C = C ^ 2
| =按位或赋值操作符C | = 2等价于C = C | 2
  • 类型转换与运算

Java允许整型、字符型、浮点型数据进行混合运算,运算时不同类型的数据线转换为同一类型后再进行运算,转换的原则为:

操作数1操作数2结果
byte short intbyte short intint
byte  short intlonglong
byte  short int longfloatfloat
byte  short int long floatdoubledouble
charintint

 

  • 字符串连接符 +

面试题:(""+a+b)和(a+b+"")有啥区别?

 int a = 10;
int b = 20;
System.out.println(a+b);
//字符串在前面 后面会拼接
System.out.println(""+a+b);
//字符串在后面 依旧运算
System.out.println(a+b+"");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值