Java基础之运算符

原文出处:Java基础之运算符   关注码农爱刷题,看更多技术文章!

其他文章:Java基础之数组

【基本内容】

      运算符是编程语言中用于执行各种操作的符号或关键字。Java中运算符可以分为下图中八大类:

图片

一、算术运算符

图片

int  a = 15;
int  b = 20;

// 两数相加
int  result = a + b;
System.out.println("a + b =" + result); 
// result = 35;

// 两数相减
result = b - a;
System.out.println("b - a =" + result); 
// result = 5;

// 两数相乘
int  result = a * b;
System.out.println("a * b =" + result); 
// result = 300;

// 两数相除
result = b / a;
System.out.println("b / a =" + result); 
// result = 1; 只取整数部分


// 两数求余
result = b % a;
System.out.println("b % a =" + result); 
// result = 5; 只取余数部分

//自增
System.out.println("a++ =" + a++); //15,先输出再自增
System.out.println("a =" + a); //16
System.out.println("++a =" + ++a); //17,先自增再输出

//自减
System.out.println("b-- =" + b--); //20,先输出再自减
System.out.println("b =" + b); //19
System.out.println("--b =" + --b); //18,先自减再输出

二、关系运算符

图片

int  a = 15;
int  b = 20;

System.out.println("a > b =" + (a > b)); //false
System.out.println("a < b =" + (a < b)); //true
System.out.println("a >= b =" + (a >= 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)); //false

三、逻辑运算符

图片

int  a = 15;
int  b = 20;

boolean result = (a > 0) && (b > 0);
System.out.println("(a > 0) && (b > 0) =" + result ); //true

result = (a > 0) || (b < 0);
System.out.println("(a > 0) || (b < 0) =" + result ); //true

result = (a < 0) || (b < 0);
System.out.println("(a < 0) || (b < 0) =" + result ); //false

result = (a > 0) || (b < 0);
result = !reuslt;
System.out.println("(a > 0) || (b < 0) =" + result ); //false

四、赋值运算符

图片

int  a = 15;  //赋值15
a += 3;  //相加并赋值,结果为18
a -= 3;  //相减并赋值,结果为15
a *= 3;  //相乘并赋值,结果为45
a /= 3;  //相除并赋值,结果为15
a %= 3;  //取模并赋值,结果为0 

五、位运算符

图片

// 按位与 &
int a = 4 & 5 ;
// 底层运算是 0100 & 0101 = 0100 = 4

// 按位或 |
int a = 4 | 5 ;
// 底层运算是 0100 | 0101 = 0101 = 5

// 异或运算 ^
int a = 4 ^ 5 ;
// 底层运算是 0100 | 0101 = 0001 = 1

// 按位非即取反运算 ^
int a = ~4 ;
// a = -5(此处涉及到补码反码符号位等知识暂不作深入讲解)

//位移操作只针对int类型有效,byte,short,char,long需先转换为int再进行
//左移n位相当于乘以2的n次方
int a = 20 << 2 ;
//结果 a = 80

//右移n位相当于除以2的n次方,除不尽向下取整
int a = 20 >> 2;
//结果 a = 5
int b = -20 >> 2;
// 结果 b = -5

// 无符号右移
int a = 20 >>> 2;
//结果 a = 5
int b = -20 >>> 2;
// 结果 b = 1073741819

六、三元运算符

  Java中唯一的一个三元运算符是条件运算符,其格式如下:

     表达式1?表达式2:表达式3

不多做解释,参看以下代码,自己体会:

int  a = 10;
int  b = 20;
int max = a > b ? a : b; // 结果max为20

七、类型实例检查运算符

     instanceof: 检查对象是否是特定类的实例 ;参看下列代码

String name = "coder love brushing topic";
boolean isStr = name instanceof String; // isStr = true
isStr = name instanceof Integer;  // isStr = false

八、类型转换运算符

     用于将值从一种类型转为另一种类型,符号格式和代码如下:

      (type): 强制类型转换

long a = 10;
int b = (int) a;

【注意事项】

1.位运算的深入:位运算是上述运算中最不好掌握的一种运算,因为它是对二进制的运算,而二进制不是我们工作生活经常使用的进制,不直观;此外二进制有一些运算规则需要大家了解,如下:

序号规则说明
1最高位为符号位,0表示正数,1表示负数
2二进制运算都是以其补码的方式参与
3正数的原码、反码和补码都一样,三码合一
4负数反码是原码取反(符号位不变),反码+1则为补码
5零的反码和补码都是零

 因为正数和零的原码、反码和补码都一样,此处以负数-1为例展示原码、反码和补码的转换关系:

short aa = -1; 
// short类型在Java中占2字节
// 原码:10000000 00000001 (最高为1表示负数)
// 反码: 11111111 11111110 (最高位符号位不变,其他各位取反)
// 补码:11111111 11111111 (反码 + 1)

// 逻辑与 &
计算 aa = -1 & 4
// 因为是用补码参与运算
// -1补码: 11111111 11111111 
//  4补码: 00000000 00000100 
// 逻辑与: 00000000 00000100 (结果为4,正数不用再转为原码)


// 逻辑或 |
计算 aa = -1 | 4
// 因为是用补码参与运算
// -1补码: 11111111 11111111 
//  4补码: 00000000 00000100 
// 逻辑与:  11111111 11111111 (结果为负数,需要转为原码)
//先转反码: 11111111 11111110 (补码-1得反码)
//再转原码: 10000000 00000001 (取反得原码,结果为-1)

// 异或运算 ^
计算 aa = -1 ^ 4
// 因为是用补码参与运算
// -1补码: 11111111 11111111 
//  4补码: 00000000 00000100 
// 异或运算:  11111111 11111011 (结果为负数,需要转为原码)
//先转反码: 11111111 11111010 (补码-1得反码)
//再转原码: 10000000 00000101 (取反得原码,结果为-5)

// 取反运算 ^
计算 aa = ~-1 
// 因为是用补码参与运算
// -1补码:   11111111 11111111 
// 取反运算: 00000000 00000000 (结果不为负数,需无转码,值为0)

// 左移 <<
计算 aa = -1 << 2
// 因为是用补码参与运算
// -1补码:  11111111 11111111 
// 左移2位: 11111111 11111100 (低位补0,结果为负数,需转码)
//先转反码: 11111111 11111011 (补码-1得反码)
//再转原码: 10000000 00000100 (取反得原码,结果为-4)
// aa = -1 * 2^2  = -4 

// 右移 >>
计算 aa = -1 >> 2
// 因为是用补码参与运算
// -1补码:  11111111 11111111 
// 右移2位: 11111111 11111111 (高位补符号位1,结果为负数,需转码)
//先转反码: 11111111 11111110 (补码-1得反码)
//再转原码: 10000000 00000001 (取反得原码,结果为-1)
// aa = -1 / 2^2  = -0.25 向下取整= -1

// 无符号右移 >>>
计算 aa = -1 >>> 2
// 因为是用补码参与运算
// -1补码:  11111111 11111111 
// 右移2位: 00111111 11111111 (高位补符号位0,结果为正数无需转码)
// aa = 1073741823

2.位运算的应用:位运算相比算术运算符更高效,它常被用于下列场景:

// 2*8怎么运算性能最好?
// 采用左移运算
int a = 2 << 3;

// 怎么高效交换两个整数变量的值
// 采用异或运算
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;

//怎么判断奇偶数
// 用逻辑与
int num = 5;
System.out.println(num + "是" + ((num & 1) == 0?"偶数":"奇数"));
//原因:二进制除了最后一位都是都是偶数,所以判断最后一位是0或1就可以判断奇偶

 原文出处:Java基础之运算符   关注码农爱刷题,看更多技术文章!

其他文章: Java基础之数组

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值