目录
一、算数运算符
运算符 | 运算 | 示例 | 结果 |
+ | 正号 | +1 | 1 |
+ | 加 | 1+2 | 3 |
- | 负号 | -1 | -1 |
- | 减 | 2-1 | 1 |
* | 乘 | 1*2 | 2 |
/ | 除(取整) | 10/4 | 2 |
% | 取余 | 10%3 | 1 |
-- -- | 自减:先运算后取值 自减:先取值后运算 | i=1;--i i=1;i-- | 0 1 |
++ ++ | 自加:先运算后取值 自加:先取值后运算 | i=1;++i i=1;i++ | 2 1 |
//取整/ 1.整数运算结果是整数2.以精度最大的类型输出(小数)
System.out.println(10 / 4);//2
System.out.println(10.0 / 4);//2.5
//取余%
System.out.println(10 % 3);//1
System.out.println(-10 % 3);//-1
System.out.println(10 % -3);//1
System.out.println(-10 % -3);//-1
//++使用
int i = 1;
++i;//+在前先进行+运算,再取值 i = i+1 -> i = 2
i++;//+在后先取值,再进行+运算 i = i+1 -> i = 1
//--同理
二、关系运算符(比较运算符)
- 关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
运算符 | 运算 | 示例 | 结果 |
== | 相等 | 2==3 | false |
!= | 不等 | 2!=3 | true |
< | 小于 | 2<3 | true |
> | 大于 | 2>3 | false |
<= | 小于等于 | 2<=3 | true |
>= | 大于等于 | 2>=3 | false |
三、逻辑运算符
逻辑与& | <-符号左右两边都对才对-> | 短路与&&(左边不对则右边不必执行) |
逻辑或| | <-符号左右两边一个对都对-> | 短路或||(左边对则右边不必执行) |
逻辑异或a^b | a与b不同时 | true |
取反! | true取反 | false |
//逻辑与<-符号左右两边都对才对->
int i = 50;
if (i > 20 & i < 80){
System.out.println("逻辑与");
}
//短路与<-符号左右两边都对才对->(左边不对则右边不必执行)
if (i > 20 && i < 80){
System.out.println("短路与");
}
//逻辑或<-符号左右两边一个对都对->
int n = 40;
if (n > 20 | n<60){
System.out.println("逻辑或");
}
//短路或<-符号左右两边一个对都对-> (左边对则右边不必执行)
if (n > 20 || n<60){
System.out.println("短路或");
}
//逻辑异或
boolean b = (1<10)^(1>10);
System.out.println(b);//两边不同时true
//取反
System.out.println(50>20);//true
System.out.println(!(50>20));//false
四、赋值运算符
- 基本赋值运算符 int a = 10;
- 复合赋值运算符+= ,-= ,*= , /= ,%= 等; a += b; [等价 a = a + b;] ; a -= b; [等价 a = a - b; ]
- 运算顺序从右往左 int num = a + b + c;
- 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值 int num = 50; int num2= 77 * 33 - 11; int num3 = a;
- 复合赋值运算符会进行类型转换。
//复合赋值运算
int i1 = 10;
i1 += 6;//等于i1 = i1 + 6;
i1 -= 6;//等于i1 = i1 - 6;
i1 *= 6;//等于i1 = i1 * 6;
//复合赋值运算符会进行类型转换。
byte b = 2;
b+=3;//等于 b = (byte)(b+3)
五、三元运算符
- 语法:条件表达式?表达式1(条件判断true执行):表达式2(条件判断false执行);
- 表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)
//三元运算符
int i1 = 11;
int i2 = 22;
int num = i1 < i2 ? i1++:i2--;//返回11
//表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)
int n1 = 33;
int n2 = 55;
int n3 = n1 < n2? (int)333.3:(int)555.5;//返回333 (强制类型转换)
double n4 = n1 < n2? 333:555;//返回333.0 (自动类型转换)
- 例题//实现3个数最大值:
//实现3个数最大值
int i1 = 55;
int i2 = 22;
int i3 = 33;
int max = (i1>i2?i1:i2)>i3?(i1>i2?i1:i2):i3;
System.out.println(max);
六、位运算符
按位与& | 两位全为1,结果为1,否则为0 |
按位或| | 两位有一个为1,结果为1,否则为0 |
按位异或^ | 两位一个为0,一个为1,结果为1,否则为0 |
按位取反~ | 0->1 1->0 |
算数右移>> | 低位溢出,符号位不变,并用符号位补溢出的高位 |
算数左移<< | 符号位不变,低位补 0 |
>>>逻辑右移(无符号右移) | 运算规则是: 低位溢出,高位补 0 |
//算术右移 >> 算术左移 <<:
int a=1>>2; //1 => 00000001 => 00000000 本质 1 / 2 / 2 =0
int c=1<<2; //1 => 00000001 => 00000100 本质 1 * 2 * 2 = 4
七、instanceof运算符
- 左边是一个对象,右边是一个类。当左边的对象是右边的类的或子类创建的对象时true,否则false
Cat cat = new Cat();
System.out.println(cat(子类对象) instanceof Animal(父类));//true
八、进制
- 二进制:0,1 ,满 2 进 1.以 0b 或 0B 开头。
- 十进制:0-9 ,满 10 进 1。
- 八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。
- 十六进制:0-9 及 A(10)-F(15),满 16 进 1. 以 0x 或 0X 开头表示( A-F 不区分大小写)
- 二进制转换成十进制示例:规则: 从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方然后求和。1010->1*2^4-1 + 0*2^3-1 + 1* 2^2-1 + 0*2^1-1 = 8+0+2+0=10 //八与十六进制换成十进制同理
- 十进制转换成二进制示例:将该数不断除2,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。//十进制换成八与十六进制同理
- 二进制转换成八进制:规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。(每三位一组把二进制数转为十进制即可)二进制转换成十六进制:四位一组
- 八进制转换成二进制:将八进制数每 1 位,转成对应的一个三位的二进制数即可。(每三位一组把十进制数转为二进制即可)十六进制转换成二进制(四位一组)
九、原码、反码、补码
- 二进制的最高位是符号位: 0表示正数,1表示负数
- 正数的原码=反码=补码 (三码合一)
- 负数的反码 =原码符号位不变,其它位取反(0->1,1->0);负数的补码=反码+1,负数的反码 =负数的补码 - 1
- 0的反码,补码都是0
- java没有无符号数,换言之,java中的数都是有符号的在计算机运算的时候,都是以补码的方式来运算的.当我们看运算结果的时候,要看他的原码