运算符☆
(1)算术运算符(+、-、*、/、%、++、--)
A:就是对敞亮和变量进行操作的符号
B:“+”的用法
--加法
--正号
--字符串连接符
C:“/”和“%”的区别
★整数相除只能得到整数,如果想得到小数,必须将数据类型转化为浮点数类型,/取得是商,%取得是余数
D:“++”和“--”的用法
--单独使用
放在操作数据的前面和后面效果一样
a++或者++a效果一样
--参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
int a = 10;
int b = ++a;
放在操作数的后面:先参与操作,再自增或者自减
int a = 10;
int b = a++;
练习题:
int x = 4;
int y=(x++)+(++x)+(x*10)
请分别计算出x,y的值(6,70)
(2)赋值运算符
= 赋值运算符,也是最基本的赋值运算符
例如int x = 10; 把10赋值给int类型的变量x
+=、-=、*=、/=、%= 扩展赋值运算符,将左边的加上,减去,乘以,除以,取余右边的,然后赋值给左边的
面试题:
short s = 1;s = s + 1;
short s = 1;s += 1;
请问上面的代码哪个有问题?
解答:第一个有问题,因为short类型的变量s在和1做加法运算的时候,先把数据类型转换为int类型,在进行计算,所以再重新赋值给short类型会出现精度问题;而第二个没有问题,因为扩展赋值运算符其实隐含了自动强制转换。
s += 1 <------> s = (s的数据类型)(s+1);
(3)比较运算符
A:==、!=、>、>=、<、<=
B:无论运算符两端简单还是复杂最终结果是boolean类型。
C:千万不要把==写成了=
(4)逻辑运算符
& 与 有false则false
| 或 有true则true
^ 异或 相同则false,不同则true。(情侣关系)
! 非 非true则false,非false则true
&& 双与 结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
|| 双或 结果和|是一样的,只不过有短路效果。左边是true,右边不执行
★逻辑运算符用于连接boolean类型的表达式或者值
(5)位运算符
& 位与运算,转化为二进制,有0则0
| 位或运算,转化为二进制,有1则1
^ 位异或运算,转化为二进制,相同则0,不同则1
~按位取反运算符,0变1,1变0
★ ^ 的特殊用法:一个数据针对另一个数据位异或两次,该数不变
<<:左移,左边最高位丢弃,右边补齐0
把<<左边的数据*2的移动次幂
3 << 2 = 3*2^2=12
>>:右移,最高位是0,左边补齐0;最高位是1,左边补齐1
把>>左边的数据除以2的移动次幂
-24>>2 = -24/(2^2)=-6
>>>:无符号右移,无论最高位是1还是0,左边补齐0
面试题:
a.请实现两个变量的交换
--采用第三方变量
--用位异或运算符(记法:左边x、y、x,右边x^y)
x = x^y
y = x^y
x = x^y
--用变量相加的方法
x = x + y
y = x - y
x = x - y
--一句话搞定
y = (x + y) - ( x = y)
b.请用最有效率的方式计算出2乘以8的结果
2<<3
(6)三元运算符
A:格式
(比较表达式) ? 表达式1:表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
C:案例:
a:比较两个数据是否相等
b:获取两个数据中的最大值
c:获取三个数据中的最大值
|
|