03.运算符
Posted W-forever
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03.运算符相关的知识,希望对你有一定的参考价值。
运算符
算术运算符
+ :正数加法连接符
连接符的作用:让任何的数据都可以通过字符串进行连接
连接符要注意:任何类型的数据与字符串使用连接符连接,那么结果都是字符串类型的数据
如果加号用于字符串的时候,那么加号就是一个连接符,并不是做加法运算
- :
* :
/ :
% :
++ :自增相当于操作数加一
前自增:++位于操作数的前面,先自增,后使用
后自增:++位于操作数的后面,先使用,后自增
-- :操作数减一
前自减:--位于操作数的前面
后自减:先使用,后自减
class demn{
public static void main(String[] args){
int i1 = 1;
int i2 = 2;
System.out.println("hello" + "world");
//计算机每次运算的时候只可以取两个数进行运算
System.out.println(1 + 2 + 3 + "world" + 1 + 2 + 3);//6world123
int a = 12.0;
int b = 3;
System.out.println(a / b); //3
java中做取模运算时,结果的正负号取决于被除数
System.out.println("结果" + (10 % 3));
System.out.println("结果" + (10 % -3));
System.out.println("结果" + (-10 % 3));
System.out.println("结果" + (-10 % -3));
//四个的结果都是1
int a = 0;
int b = ++a;
int c = a++;
System.out.println("b = " + b + "c = " + c);
后自增在jvm中的运行原理:
因为后自增要使用到没有加一之前得值,那么jvm会先声明一个变量用于保存没有+1之前得值
原理:
1.int temp = i;//声明了一个临时变量用于记录没有加一之前得值
2.自增 i = i + 1;i = 1;
3.return temp;
}
}
赋值运算符
= :赋值运算符
+= :
-= :
*= :
/= :
%= :
class demn{
public static void main(String[] args){
int i = 10;
i += 2;
System.out.println("i = " + i);
byte b1 = 1;
byte b2 = 2;
b2 = b2 + b1;//报错,需要强制类型转化
b2 += b1;//b2 += b1,在编译的时候,java编译器会进行强制类型转化,不需要我们手动转化
System.out.println("b2:" + b2);
}
}
比较运算符
== :判断是不是相等
==用于比较两个基本数据类型的时候,比较的是两个变量所存储的值是否一致
==用于比较两个引用变量的时候,比较的是两个引用类型变量所记录的内存地址是否一致
!= :
> :
< :
>= :
<= :
class demn{
public static void main(){
byte b = 10;
long l = 30;
System.out.println(l > b);// 两个不同类型的数据是否可以比较,可以的,但是两个不同类型的数据必须是兼用的数据,这个比较过程会先把b转化为long类型的变量,然后再进行比较
System.out.println(\'a\' > 50);
}
}
逻辑运算符
逻辑运算符是用来连接布尔表达式的
& :与,并且,只要两边的布尔表达式有都为true,结果才是true
| :或 只要两边的表达式又一边为true,那么结果就是true,只有两边同时为false,结果才是false
^ : 异或 只要两边的布尔表达式结果不一致,那么结果就是true
! : 非
&& : 短路,双与
|| : 短路, 双或
短路与与双与的区别;
相同点:短路与和单与的运算结果都是相同的
不同点:使用短路与的时候,如果左边的表达式为false,则不会在运算右边的布尔表达式,从而提高了效率
短路或与单或的区别:
相同点:运算结果是一致的
不同点:使用短路或的时候,如果左边的表达式为true,则不会在运算右边的布尔表达式
class demn{
public static void main(){
}
}
位运算符
位运算符就是直接操作二进制位的
& :与
| : 或
^ : 异或
~ : 取反
规律:如果操作数a连续异或同一个操作数两次,那么结果还是
class demn{
class static void main(String[] args){
System.out.println(6 & 3);//2
System.out.println(6 | 3);//7
System.out.println(6 ^ 3);//5
System.out.println(~ 7);//转化为二进制数后,为负数,是补码,应该全部取反之后加一
}
}
使用异或对图片数据进行加密
class imagetest{
public static void main(String[] args){
//找到图片文件
File infile = new File("f:\\\\美女.png");
File outfile = new File("e:\\\\加密的图片.png");
//建立数据通道,让图片的二进制数据流入
FileInputStream input = new FileInputStream(infile);
FileOutputStream output new FileOutputStream(outfile);
//边读,把读到的数据异或到一个,把数据写出
int content = 0;
while((content = input.read()) != -1){
output.write(content^12);
}
output.close();
input.close();
}
}
java位运算中可能会出现的笔试题目
1.交换两个变量的值
2.取出一个二进制数据的指定位数:若要后四位,与1111相与
class demn{
public static void main(){
int a = 3;
int b = 5;
int temp;
//第一种方式:定义第三方变量
int temp = a;
a = b;
b = temp;
//第二种方式:相加法,缺点:两个整型变量相加,有可能会出现超出int的表示范围
a = a + b;
b = a - b;
a = a - b;
//第三种方法:可以使用异或缺点:逻辑不清晰
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
}
移位运算符,运算符的优先级
<< : 左移
对一个操作数进行左移运算的时候,结果就是等于操作数乘以2的n次方,n就是左移的位数
>> : 右移
一个操作数在进行右移的时候,如果该操作数是一个正数,那么左边空缺位补0,如果该操作数是一个负数,那么使用1补,一个操作数在做右移运算时,实际上就是等于该操作数除以2的n次方,n就是右移的位数
>>> : 无符号右移
无符号右移和右移的区别:进行右移运算的时候,如果该操作数是一个正数,那么左边空缺位使用0补,负数一补,如果使用无符号数右移,不管是正数还是负数,统一使用0补
class public{
public static void main(){
System.out.println(3 << 1);//6,和计算机组成里面一样
System.out.println(3 << 2);
}
}
笔试题目:使用最高的效率算出2 * 8的结果
2 << 3
三元运算符
格式:
布尔表达式?值1:值2;
三元运算符要注意的细节:
使用三元运算符,一定要使用其返回的结果,或者定义一个变量接收该表达式返回的结果
class public{
class static void main(String[] args){
int age = 16;
System.out.println(age>18?"成年人":"未成年人");
}
}
以上是关于03.运算符的主要内容,如果未能解决你的问题,请参考以下文章