【JavaSE】运算符详解及与C语言中的区别

简介: 【JavaSE】运算符详解及与C语言中的区别




一、什么是运算符

运算符就是对操作数进行操作时的符号,不同运算符操作的含义不同

部分运算符在使用时会发生整形提升操作

二、算术运算符

算术运算符有三种:基本四则运算符、增量运算符和自增/自建运算符

1.基本四则运算符

基本四则运算的运算符包括五个:+    -   *   /(整除)     %(取余或者取模)

(1)/的规则(注意事项)

【加小数点问题】int / int 结果还是int类型,而且会向下取整

如:

public static void main(String[] args) {
        int a = 3;
        int b = 2;
// 在数学中应该是1.5 但是在Java中输出结果为1 会向下取整,即小数点之后全部舍弃掉了
        System.out.println(a / b);
// 如果要得到数学中的结果,可以使用如下方式
        double d = a*1.0 / b;
        System.out.println(d);
    }

所以,当左右两边不是float时,需要加上.0或者*1.0

【操作数取值】

当做除法时,右边的操作符不能是0,否则编译器会报错误(算术错误),如:10/0,这是错误的。

(2)%的规则

(1)与/一样,右边的操作数不能是0,如:10%0

(2)% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的。也就是%的结果可以有小数和负数。

(3)四则运算符规则

都是二元运算符,使用时必须要有左右两个操作数。两侧操作数类型不一致时,向类型大的提升

2.增量运算符

增量运算符包括:+=    -=    *=    %=

如:操作完成后,会将操纵的结果赋值给左操作数

int a = 1;
a += 2;          // 相当于 a = a + 2
System.out.println(a);  // 输出3
a -= 1;          // 相当于 a = a - 1
System.out.println(a);  // 输出2
a *= 3;          // 相当于 a = a * 3
System.out.println(a);  // 输出6
a /= 3;          // 相当于 a = a / 3
System.out.println(a);  // 输出2
a %= 3;          // 相当于 a = a % 2
System.out.println(a);  // 输出2

注意:只有变量才能使用该运算符,常量不能使用

3.自增/自减运算符++/--

【符号特点】++是给变量的值+1,--是给变量的值-1。

【分类】分为前置/后置++/--,如:a++(后置++,使用完后++),++a(前置++,++完后再使用)

【使用】

int a = 1;
a++;   // 后置++  表示给a的值加1,此时a的值为2
System.out.println(a++);  // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(a);   // 输出3
++a;   // 前置++  表示给a的值加1
System.out.println(++a);  // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(a);   // 输出5
// --操作符给操作-1,与++含义类似

【注意点】

  • 如果单独使用,【前置++】和【后置++】没有任何区别
  • 如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式结束时给变量+1
  • 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

三、关系运算符

六个关系运算符其计算结果是 true 或者 false 。

(1)==:相等符号,用来判断两个式子是否相等

(2)!=:不等于符号,用来判断是否不相等

(3)>:大于号,用来判断大小

(4)<:小于号,用来判断大小

(5)>=:大于等于号,

(6)<=:大于等于号

【使用】

int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
//   在Java中 == 表示相等
System.out.println(a == b);    // false
System.out.println(a != b);    // true
System.out.println(a < b);     // true
System.out.println(a > b);     // false
System.out.println(a <= b);    // true
System.out.println(a >= b);    // false

四、逻辑运算符(重点)

逻辑运算符包括三个,&&、||、!,运算结果都是 boolean类型。

1.逻辑与&&

【语法规则】表达式1&&表达式2

注意:表达式1和表达式2都必须是boolean的结果,两边的结果都为true,整体才为true

【规则】

表达式1 表达式2 结果

【使用举例】

public static void main(String[] args) {
    
        int a = 1;
        int b = 2;
        System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
        System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假
        System.out.println(a > 100 && b == 2);// 左为假 但 右为真 则结果为假
        System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假
    }

结果:

【用处】常用于要求两个条件需要同时满足时,如果if语句中的条件等

【短路与】逻辑与也称为短路与

什么意思呢?就是当表达式1为假的时候,表达式2不会去执行(因为没有必要再去侦察它的真假,系统就会跳过表达式2)

如:下面的代码是不会报错的

int i=111;
        System.out.println(i > 222 && (10/0)==0);

结果:

10/0的表达式是错误的,但是因为第一个表达式是错的,发生了短路,就不会再去判断第二个表达式

2.逻辑或||

【语法规则】表达式1||表达式2

注意:表达式1和表达式2都必须是boolean的结果,两边有一个为true,整体的结果就为true。

【规则】

表达式1 表达式2 结果

【使用举例】

public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a == 1 || b == 2);// 左为真 且 右为真 则结果为真
        System.out.println(a == 1 || b > 100);// 左为真 但 右为假 则结果也为真
        System.out.println(a > 100 || b == 2); // 左为假 但 右为真 则结果也为真
        System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假
    }

结果:

【短路或】逻辑或也称为短路或

同样,当表达式1为真时,不会再去执行表达式2.

3.逻辑非

【语法规则】!表达式

注意:假边真,真变假。

【规则】

表达式 结果

【使用】

int a = 1;
System.out.println(!(a == 1));  // a == 1 为true,取个非就是false
System.out.println(!(a != 1));  // a != 1 为false,取个非就是true

【注意】

在C语言中,可能会用(!数值)表示条件,如:if(!a),在java中,这是不允许的

4.补充

& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值

五、位运算符

1.位运算符介绍

(1)位操作表示:按二进制位运算.,计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是在按照二进制位的每一位依次进行计算.

操作对象:二进制的补码

(2)位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。

2.按位与&

(1)&的特点:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0

&的口诀:有0为0,全1为1。

(2)用法举例

public static void main(String[] args) {
        int a=10;
        int b=15;
        System.out.println(a&b);
    }

a&b的结果:10

运算过程:

3.按位或|

(1)|的特点:如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.

|的口诀:有1为1,全0为0。简称同为0

(2)用法举例

public static void main(String[] args) {
  
        int c=10;
        int d=15;
        System.out.println(c|d);
    }

c|d的结果:15

按位与过程:

4.按位异或^

(1)^的特点:如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.

口诀:找不同,用1标记;相同为0,相异为1

性质:

(1)支持交换律

(2)相同异或为0:a^a=0

(3)任何数异或0等于本身:a^0=a

(2)用法举例:

public static void main(String[] args) {
        int a=10;
        int b=15;
        System.out.println(a^b);
    }

a^b的结果:5

异或的过程:

5.按位取反~

(1)如果该位为 0 则转为 1, 如果该位为 1 则转为 0,又称异或非

如:10的补码为00001010,则会转为11110101

(2)用法举例

public static void main(String[] args) {
        int a=10;
        System.out.println(~a);
    }

取反结果:-11

取反过程:

六、移位运算符(了解)

1.左移操作符<<

(1)特点:左边丢弃,右边补0

注意点:因为最左边丢弃的是符号位,因此正数左移有可能变成负数

(2)用法举例:

public static void main(String[] args) {
        int a=10;
        System.out.println(a);
        System.out.println(a<<1);
        System.out.println(a<<2);
    }

左移结果:

左移过程解析:

(3)注意事项

左移的长度需要是非负数

左移一次具有*2的效果

2.右移操作符>>

右移操作符有两种:符号右移和无符号右移

(1)符号右移>>

【语法特点】最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

【用法举例】

public static void main(String[] args) {
        int a=10;
        System.out.println(a>>1);
        System.out.println(a>>2);
    }

右移结果:

右移过程刨析:

【注意事项】

(1)右移的长度需要是非负数和整数

(1)右移一位具有/2的效果,两位具有/2^2的效果,但是-1例外,会得到本身

(2)无符号右移>>>(与C的写法不同)

【语法特点】最右侧位不要了, 最左侧补都补0

【语法举例】

public static void main(String[] args) {
       int a=10;
       System.out.println(a>>>1);
       int b=-10;
       System.out.println(b>>>1);
    }

无符号右移结果:5、2147483643(整形最大值)

解析:因为最左侧丢掉的是符号位,负数会变成正数;正数依旧是/2的效果

七、条件运算符

条件运算符也成为三目运算符,是Java中唯一一个三目运算符。

(1)语法特点:表达式1 ? 表达式2 : 表达式3

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;

当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值。

【注意】

(1)表达式1的值必须是布尔表达式

(2)表达式1的值需要用变量来接收或者直接打印

(2)实例:求两个数的最大值

public static void main(String[] args) {
       int a = 520;
       int b = 1314;
       int max = a>b?a:b;
       System.out.println(max);
    }

表达式1:a>b,他们必须直接必须有一个结果

八、运算符的优先级及运算符总结

不同的符号存在优先级,但是符号很多,我们不需要记忆,只需要规范使用小括号就可以。

总结:与C语言的不同点

(1)基本四则运算符中的取模符%

在C中,%的结果只有正数;而在Java中,可以有小数和负数

(2)逻辑非!

在C中,!的左边可以是数字,或者表达式,如!1;在Java中,!的左边必须是布尔表达式,就是表达式的结果比赛true就是false

(3)|与&

Java中,& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算.。但是在C中没有这种说法

(4)无符号右移操作符>>>

无符号右移操作符其实就是右移操作符的一种操作规则。在C语言中,右移操作符都是>>,只是在不同的平台上有不同的右移方式(右移方式不能自己决定);而在Java中,把他们分离开来,成为了两个符号,右移的方式在操作者手中。


相关文章
|
2月前
|
存储 C语言
C语言数据类型、变量和运算符以及printf相关问题
C语言数据类型、变量和运算符以及printf相关问题
|
23天前
|
C语言
C语言判断和运算符联系
在 C 语言中,判断与运算符紧密相关,主要体现在条件表达式的使用上。
168 87
|
22天前
|
安全 C语言
C语言运算符的使用注意点
在C语言中,正确使用运算符能提升代码的可读性和效率。本文介绍了八大注意事项:运算符优先级和结合性影响运算顺序;自增/自减运算符分前缀和后缀形式;逻辑运算符有短路特性;位运算符直接操作二进制位需谨慎;条件运算符简洁但避免复杂嵌套;类型转换避免意外结果;使用括号明确运算顺序。掌握这些要点有助于编写更安全高效的代码。
164 72
|
9天前
|
安全 C语言
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
21 4
|
23天前
|
程序员 C语言
【C语言基础考研向】06运算符与表达式
本文介绍了C语言中的运算符分类、算术运算符及表达式、关系运算符与表达式以及运算符优先级等内容。首先概述了13种运算符类型,接着详细说明了算术运算符的优先级与使用规则,以及关系运算符和表达式的真假值表示,并给出了C语言运算符优先级表。最后附有课后习题帮助巩固理解。
76 10
|
23天前
|
存储 编译器 C语言
【C语言基础考研向】07逻辑运算符与赋值运算符
本文介绍了C语言中的逻辑运算符与逻辑表达式、赋值运算符以及求字节运算符`sizeof`。逻辑运算符包括`!`(逻辑非)、`&&`(逻辑与)和`||`(逻辑或),其优先级规则与数学运算符类似。通过示例展示了如何用这些运算符判断闰年及逻辑非的运算方向。此外,文章还解释了左值与右值的概念及其在赋值运算中的应用,并介绍了复合赋值运算符的使用方法,如加后赋值`+=`和乘后赋值`*=`。最后,通过`sizeof`运算符示例展示了如何获取变量的字节大小。
|
5月前
|
C语言
C语言中的条件运算符和条件表达式详解
C语言中的条件运算符和条件表达式详解
171 0
|
2月前
|
C语言
C语言------运算符与表达式
这篇文章是C语言运算符与表达式的实训教程,通过多个示例程序展示了如何使用算术运算符、关系运算符、逻辑运算符以及条件语句来解决实际问题,并介绍了如何通过函数库简化复杂数学运算。
C语言------运算符与表达式
|
2月前
|
存储 编译器 C语言
C++内存管理(区别C语言)深度对比
C++内存管理(区别C语言)深度对比
72 5
|
2月前
|
C语言
C语言中的运算符
C语言中的运算符
26 0
下一篇
无影云桌面