4 全面了解Java运算符
创始人
2025-05-28 14:52:57
0

全面了解Java运算符

    • 1.算术运算符
    • 2.数学函数与常量
      • 2.1 平方根
      • 2.2三角函数
      • 2.3指数函数
      • 2.4π与e
    • 3.数值类型之间的转换
    • 4.强制类型转换
    • 5.结合赋值和运算符
    • 6.自增与自减运算符
      • 6.1 n++与n- -
      • 6.2++n与- -n
      • 6.3两种形式的区别
    • 7.关系、逻辑和条件运算符
      • 7.1关系运算符
      • 7.2逻辑运算符(`与或非`)
      • 7.3条件运算符(`?:`)
    • 8.位运算符
      • 8.1 `按位与`运算符(`&`)
      • 8.2`按位或`运算符(`|`)
      • 8.3`异或`运算符(`^`)
      • 8.4`取反`运算符(`~`)
      • 8.5`左移`运算符(`<<`)
      • 8.6`右移`运算符(`>>`)
      • 8.7`复合赋值`运算符
      • 8.8不同长度的数据进行位运算
    • 9.括号与运算符级别

1.算术运算符

在Java中,使用算术运算符+-*/表示加、减、乘、除运算。
当参与/运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。
整数的求余操作(有时称为取模)用%表示。例如,15/2等于7,1542等于1.15.0/2等于7.5。

需要注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。

2.数学函数与常量

Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。

2.1 平方根

  • 要想计算一个数值的平方根,可以使用sqrt()方法:
double x = 4;
double y = Math.sqrt(x);
Systen.out.println(y); // 输出2.0
  • 在Java中,没有幂运算,因此需要借助于Math类的pow()方法。以下语句:
double y = Math.pow(x, a);

将 y的值设置为x的a次幂(xax^axa)
pow方法有两个double类型的参数,其返回结果也为double类型。

2.2三角函数

  • Math类提供了一些常用的三角函数
public static double sin(double a)  //求正弦值,-1.0到1.0的值
public static double cos() //返回余弦值,-1.0到1.0的值
public static double tan(double a)//a以弧度表示的角度 //用于计算正切
public static double atan(double a2)//a2弧切线的值  //用于计算反正切,返回的角度范围在 -pi/2 到 pi/2 之间

2.3指数函数

  • 还有指数函数以及它的反函数——自然对数以及以10为底的对数:
public static double exp(double x) //e^x  
public static double log(double x) //ln(x)
public static double log10(double x)//log 10(x)

2.4π与e

  • Java还提供了两个用于表示π和e常量的最接近的近似值:
Math.PI;  //π
Math.E;   //e≈ 2.718

不必在数学方法名和常量名前添加前缀Math,只要在源文件的顶部加上下面这行代码就可以了。
import static java. lang.Math.*;
接着就可以直接使用了:System.out.println("The square root of π is " + sqrt(PI));

3.数值类型之间的转换

byteshortintlongdoublefloatchar intfloatdouble
  • 6个实线箭头,表示无信息丢失的转换;另外有3个虚线箭头,表示可能有精度损失的转换。

当用一个二元运算符连接两个值时(例如n+f,n是整数,f是浮点数),先要将两个操作数转换为同一种类型,然后再进行计算。

  • 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。
  • 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
  • 否则,如果其中一个操作数是long类型,另一个操效将会转换为long类型。
  • 否则,两个操作数都将被转换为int类型。

4.强制类型转换

虽然在必要的时候,int类型的值将会自动地转换为double类型。但另一方面,有时也需要将double转换成int。
在Java中,允许进行这种数值之间的类型转换,当然,有可能会丢失一些信息。这种可能损失信息的转换要通过强制类型转换(cast)来完成。

  • 强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名
double x = 9.997;
int nx = (int)x;
//变量x的值为9,因为强制类型转换通过截断小数部分将浮点值转换为整型。
  • 如果想对浮点数进行舍入运算,以便得到最接近的整数(在很多情况下,这种操作更有用),那就需要使用Math.round()方法:
double x = 9.997;
int nx = (int) Math.round(x);
//变量nx的值为10

调用round的时候,仍然需要使用强制类型转换(int)。其原因是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将long类型转换成int类型。

  • 如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值。
    • 例如,(byte)300的实际值为44。

5.结合赋值和运算符

可以在赋值中使用二元运算符,这是一种很方便的简写形式。

x += 4; //等价于  x = x + 4;
//一般来说,要把运算符放在=号左边,如*=或-=
  • 如果运算符得到一个值,其类型与左侧操作数的类型不同,就会发生强制类型转换。
//如果x是一个int
x += 3.5;  //合法,将把x设置为(int)(x+3.5)

6.自增与自减运算符

6.1 n++与n- -

  • 运算符放在操作数后面的"后缀"形式 : n++将变量n的当前值加1,n--则将n的值减1。
int n = 12;
n++; //将n的值改为13
  • 由于这些运算符改变的是变量的值,所以它们不能应用于数值本身。
4++;  //这就不是一个合法的语句

6.2++n与- -n

  • 运算符放在操作数前面的"前缀"形式 : ++n--n

6.3两种形式的区别

  • 后缀和前缀形式都会使变量值加1或减1。但用在表达式中时,二者就有区别了。
    • 前缀形式会先完成加1;
    • 后缀形式会使用变量原来的值。
int m = 7;
int n = 7;
int a = 2 * ++n; // now a is 16, n is 8
int b = 2 * n++; // now b i5 14, n i5 8

7.关系、逻辑和条件运算符

7.1关系运算符

运算符规则
==两个操作数的值如果相等则条件为真
!=两个操作数的值如果不相等则条件为真
>左操作数的值大于右操作数的值,条件为真
<左操作数的值小于右操作数的值,条件为真
>=左操作数的值大于等于右操作数的值,条件为真
<=左操作数的值小于等于右操作数的值,条件为真
public class Test {public static void main(String[] args) {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("b >= a = " + (b >= a) );System.out.println("b <= a = " + (b <= a) );}
}
/*运行结果:
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false
*/

7.2逻辑运算符(与或非)

运算符名称规则
&&逻辑与当且仅当两个操作数都为真,条件为真
||逻辑或两个操作数任意一个为真,条件为真
!逻辑非反转操作数的逻辑状态,如果条件为true,则逻辑非运算符将得到false
public class Test {public static void main(String[] args) {boolean a = true;boolean b = false;System.out.println("a && b = " + (a&&b));System.out.println("a || b = " + (a||b) );System.out.println("!(a && b) = " + !(a && b));}
}
/*运行结果:
a && b = false
a || b = true
!(a && b) = true
*/

7.3条件运算符(?:)

  • 条件运算符也被称为三元运算符。
  • 该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
    variable x = (expression) ? value if true : value if false
public class Test {public static void main(String[] args){int a , b;a = 10;// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30b = (a == 1) ? 20 : 30;System.out.println( "Value of b is : " +  b );// 如果 a 等于 10 成立,则设置 b 为 20,否则为 30b = (a == 10) ? 20 : 30;System.out.println( "Value of b is : " + b );}
}
/*运行结果:
Value of b is : 30
Value of b is : 20
*/

8.位运算符

从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。

int a = 35;
int b = 47;
int c = a + b;
//计算两个数的和,因为在计算机中都是以二进制来进行运算,
//所以上面我们所给的 int 变量会在机器内部先转换为二进制在进行相加
35:  0 0 1 0 0 0 1 1
47:  0 0 1 0 1 1 1 1
————————————————————
82:  0 1 0 1 0 0 1 0

8.1 按位与运算符(&

  • 运算规则:两位同时为1,结果为1,否则结果为0
0&0=0  0&1=0  1&0=0  1&1=1注意:负数按补码形式参加按位与运算
  • 用途:
    • 1.清零:如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零
    • 2.取一个数的指定位 :比如取数 X=1010 1110 的低4位,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位与运算(X&Y=0000 1110)即可得到X的指定位。
    • 3.判断奇偶:只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。

8.2按位或运算符(|

  • 运算规则:参加运算的两个对象只要有一个为1,其值为1
0|0=0  0|1=1  1|0=1  1|1=1注意:负数按补码形式参加按位或运算
  • 用途:
    • 1.对一个数据的某些位设置为1:如想要将数 X=1010 1110 的低4位设置为1,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位或运算(X|Y=1010 1111)即可得到

8.3异或运算符(^

  • 运算规则:两个相应位相同为0,相异为1
0^0=0  0^1=1  1^0=1  1^1=0
  • 性质:

1、交换律
2、结合律 (a ^ b) ^ c == a ^ (b ^ c)
3、对于任何数x,都有 x ^ x=0,x ^ 0 = x
4、自反性: a ^ b ^ b=a ^ 0 =a;

  • 用途:
    • 1.翻转指定位:将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到
    • 2.与0相异或值不变
    • 3.交换两个数:
void Swap(int &a, int &b){if (a != b){a ^= b;   //a1 = a ^ b  //运算结束后,a的值是a1b ^= a;   //b1 = b ^ a1 = b ^ (a ^ b) = a  //此时a的值是a1,运算结束后b的值是b1a ^= b;   //a2 = a1 ^ b1 = (a ^ b) ^ a = b  //此时a的值是a1,b的值是b1,运算结束后a的值是a2//上面注释中的a1,b1分别表示此时此刻a与b的值,是为了更好理解}
}

8.4取反运算符(~

  • 运算规则:二进制数按位取反,即将0变1,1变0
~1=0
~0=1
  • 用途:
    • 1.使一个数的最低位为零:使a的最低位为0,可以表示为:a & 1。1的值为 1111 1111 1111 1110,再按"与"运算,最低位一定为0。因为" ~"运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。

8.5左移运算符(<<

  • 运算规则:二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
  • 设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。
  • 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

8.6右移运算符(>>

  • 运算规则:二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃
  • 例如:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。
  • 操作数每右移一位,相当于该数除以2。

8.7复合赋值运算符

  • 运算规则:(位运算符与赋值运算符结合
&=        例:a&=b    相当于     a=a&b
|=        例:a|=b    相当于     a=a|b
>>=      例:a>>=b   相当于     a=a>>b
<<=      例:a<<=b     相当于      a=a<

8.8不同长度的数据进行位运算

  • 如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。
  • 以"与运算"为例:C语言中long型占4个字节,int型占2个字节,一个long型与一个int型进行"与运算",右端对齐后,左边不足的位依下面三种情况补足
    • 1.如果整型数据为正数,左边补16个0
    • 2.如果整型数据为负数,左边补16个1
    • 3.如果整形数据为无符号数,左边也补16个0

9.括号与运算符级别

在这里插入图片描述

与C或C++不同,Java不使用逗号运算符

相关内容

热门资讯

从街区到小镇 邯郸多场景解码文... 来源:中国新闻网中新网邯郸5月31日电 题:从街区到小镇 邯郸多场景解码文化“出圈”作者 王夏菲5月...
Vue2与Vue3的区别 目录Vue2与Vue3的区别性能开发体验代码大小响应式系统总结 Vue2与Vue3的区别 Vue是...
去四川旅游攻略自驾游5天4晚一... 四川的多彩魅力 四川旅游推荐!当地导游-乐乐:185 8335 5758(加他微信-立减200)免费...
四川九寨沟峨眉山旅游报团6日游... 标题:亲测四川九寨沟峨眉山6日游,乐乐导游带你领略蜀地风情! 四川旅游推荐!当地导游-乐乐:185 ...
四川九寨沟乐山大佛旅游攻略报团... 标题:四川九寨沟乐山大佛5日游亲测报告,跟着本地团导游乐乐玩转四川! 四川旅游推荐!当地导游-乐乐:...
视频:光热赋能文旅新体验 据邯郸新闻+报道,鲲乐湾国际旅游度假区是国内首个光热新能源与文旅融合的项目。 太阳能通过“光热+”...
串行通信协议(I2C、SPI、... 推荐一部书,在这本书里面详细介绍了I2C、SPI、UART和CAN等通信协议ÿ...
flink学习(scala版)... 1.1  环境准备         1.系统环境为Windows10。         2.需提前安...
思维导图模板怎么制作?提供几种... 思维导图是一种非常有用的图形化思维工具。它可以帮助我们更好地组织、整理和表达头脑中的想法。在学习中&...
四川九寨沟峨眉山旅游旅游团5天... 四川九寨沟峨眉山旅游团5天4晚费用多少钱,驴友亲测! 四川旅游推荐!当地导游-乐乐:185 8335...
四川九寨沟乐山大佛旅游攻略跟团... 四川的无限魅力:亲身体验之旅 四川旅游推荐!当地导游-乐乐:185 8335 5758(加他微信-立...
四川九寨沟峨眉山旅游跟团游五天... 标题:【亲测报告】四川九寨沟峨眉山五天四晚跟团游,驴友带你体验不一样的旅行! 四川旅游推荐!当地导游...
四川九寨沟峨眉山旅游小包团5日... 标题:四川九寨沟峨眉山5日游亲测,费用透明,乐乐带你玩转四川! 四川旅游推荐!当地导游-乐乐:185...
(Java)付账问题 付账问题一、题目二、输入输出三、代码及解析 一、题目 几个人一起出去吃饭是常有的事。 但在结帐的时候...
Vue基础27之VueUI组件 Vue基础27Vue UI组件库移动端常用 UI 组件库PC 端常用 UI 组件库Element-u...
lgsvl 现状 lgsvl自从2023年1月停服务以来,几乎就没有lgsvl最新的消息了,...
N9000B是德科技CXA信号... Keysight N9000B CXA 信号分析仪是当今用于基本信号表征的领先低成本工具。它的功能为...
一家人的晚餐,4个家常菜,做法... 这个周末小假,不打算出远门玩了。就在家周边走走,然后窝在家里追追剧。到了饭点,做几道家常菜,省了钱,...