JavaSE----基础语法(运算符)

本文深入解析Java中的算术运算符(包括整数运算、浮点数运算、自增自减运算)与逻辑运算符(位运算、比较运算、关系运算、逻辑运算),并提供示例代码及运行结果分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.6 运算符

1.6.1算术运算符


    示例1:
</pre><div><pre name="code" class="java">class OperatorDemo{
	public static void main(String [] args){
		int x = 3;
		int y = 4;

		System.out.println(x+y);
		System.out.println(x-y);
		System.out.println(x/y);
		System.out.println(x%y);
	}
}


    运行结果:

    分析:x/y得到的结果为0,说明两个整型数据相除得到的结果是整型,相当于取商。
    结论:1、整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
               2、“/”获取的是除法操作的商,“%”获取的是除法操作的余数
    示例2:
class OperatorDemo{
	public static void main(String [] args){;
		System.out.println(3%2);
		System.out.println(3%-2);
		System.out.println(-3%2);
	}
}
    运行结果:

    结论:正数对负数取余,结果为正。
               负数对正数取余,结果为负。
    示例3:
class OperatorDemo2{
	public static void main(String [] args){
		int x = 2;
		int y = 2;
		x++;
		++y;
		System.out.println(x);
		System.out.println(y);
		
		int a1 = 2; 
		int a2 = 2;
		int b1 = a1++;
		int b2 = ++a2;
		System.out.println("b1的值为:"+b1+",a1的值为"+a1);
		System.out.println("b2的值为:"+b2+",a2的值为"+a2);
	}
}
    运行结果:

    结论:1、单独使用:
      放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
               2、参与运算使用:
      放在操作数的前面,先自增然后再参与运算。
      放在操作数的后面,先参与运算,再自增。
    补充知识点:符号“+”的用法
        1、加法 2、正号 3、字符串连接符
class OperatorDemo3 {
	public static void main(String[] args) {
		//加法
		System.out.println(3+4);
		System.out.println('a');
		System.out.println('a'+1);
		//正号
		System.out.println(+4);		
		//字符串连接符
		System.out.println("hello"+'a'+1);
		System.out.println('a'+1+"hello");
	}
}
    运行结果:

    由此可以看出字符串“+”其他类型数据都为一个组合后的字符串。

1.6.2赋值运算符

    基本赋值运算符:=
    扩展赋值运算符:+=,  -=,  *=,  /=, %=
    =:把=右边的数据赋值给左边。
    +=:把+=左边和右边的值做加法,然后赋值给左边。
    示例1:
class OperatorDemo{
	public static void main (String [] args){
		short s = 1;
		s += 1;
		System.out.println(s);
	}
}
    运行结果:

    思考: s = s + 1和s += 1一样么?
class OperatorDemo{
	public static void main (String [] args){
		short s = 1;
		s = s + 1;
		System.out.println(s);
	}
}
    运行结果:

    分析:s += 1不等价于s = s + 1,而是等价于s = (short)(s + 1),这样,编译器在编译s += 1才不会报错。

1.6.3 比较/关系运算符

  
   注意:
    1、比较运算符的结果都是boolean型,也就是要么是true,要么是false。
    2、比较运算符“==”不能误写成“=” 。

class OperatorDemo{
	public static void main (String [] args){
		System.out.println(3!=3);
		System.out.println(4>=3);
	}
}
    运行结果:


1.6.4 逻辑运算符


    逻辑运算符用于连接两个boolean类型的表达式。
   
    "&"符号的运算特点:
    true & true = true;
    true & false = false;
    false & true = false;
    false & false = false; 

    "&"符号运算规律:
    运算的两边只要有一个是false,结果肯定是false。
    只有两边都为true,结果才是true。

    示例1:
class OperatorDemo{
	public static void main(String [] args){
		System.out.println((3>4)&(3==2));
	}
}
    运行结果:


    "|"符号的运算特点:
    true | true = true;
    true | false = true;
    false | true = true;
    false | false = false;

    "|"符号运算规律:
    运算的两边只要有一个是true,结果肯定是true。
    只有两边都为false,结果是false。
    
    示例2:
class OperatorDemo{
	public static void main(String [] args){
		System.out.println((3>4)|(3==2));
	}
}
    运行结果:


    "^"符号的运算特点:
    true ^ true = false;
    true ^ false = true;
    false ^ true = true;
    false ^ false = false;


    "^"符号运算规律:
    ^符号的两边结果如果相同,结果是false。
    两边的结果不同,结果是true。

    示例3:
class OperatorDemo{
	public static void main(String [] args){
		System.out.println((3>4)^(3==2));
	}
}
    运行结果:


    "!"符号运算规律:
    !true = false
    !false = true
    !!true = true

    示例4:
class OperatorDemo{
	public static void main(String [] args){
		System.out.println(!(3>4));
	}
}
    运行结果:

    扩展知识点:
    &&和&的区别,||和|的区别。
    &&:和&运算的结果是一样的,但是运算过程有点小区别。
    &:无论左边的运算结果是什么,右边都参与运算。
    &&:当左边为false时,右边不参加运算,这样可以提升效率。

    ||:和|运算的结果是一样的,但是运算过程有点小区别。
    |:无论左边的运算结果是什么,右边都参与运算。
    ||:当左边为true时,右边不参加运算,这样可以提升效率。

    使用&&和||比使用&和|更高效一些。

1.6.5 位运算符


     分析:因为是位运算,所以我们必须先把数据换算成二进制。

  3的二进制:11
  00000000 00000000 00000000 00000011
  4的二进制:100
  00000000 00000000 00000000 00000100

  &位与运算:有0则0。
  00000000 00000000 00000000 00000011
 &00000000 00000000 00000000 00000100
  -----------------------------------------------
  00000000 00000000 00000000 00000000
 结果是:0

  |位或运算:有1则1。
  00000000 00000000 00000000 00000011
      |00000000 00000000 00000000 00000100
 -------------------------------------------------
  00000000 00000000 00000000 00000111
 结果是:7

 ^位异或运算:相同则0,不同则1。
  00000000 00000000 00000000 00000011
 &00000000 00000000 00000000 00000100
-----------------------------------
  00000000 00000000 00000000 00000111
 结果是:7

 ~按位取反运算符:0变1,1变0
  00000000 00000000 00000000 00000011
 ~11111111 11111111 11111111 11111100 (补码)
  
 补码:11111111 11111111 11111111 11111100
 反码:11111111 11111111 11111111 11111011
 原码:10000000 00000000 00000000 00000100
 结果是:-4
    运行结果:


    ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
    
class OperatorDemo2 {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		
		System.out.println(a ^ b ^ b); //10
		System.out.println(a ^ b ^ a); //20
	}
}
    运行结果:

    面试题:请自己实现两个整数变量的交换
class OperatorTest {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		
		System.out.println("a:"+a+",b:"+b);
		
		//方式1:使用第三方变量(开发中用的)
		int c = a;
		a = b;
		b = c;
		System.out.println("a:"+a+",b:"+b);
		System.out.println("------------");
		
		int x = 10;
		int y = 20;
		//方式2:用位异或实现(面试用)
		//左边:x,y,x
		//右边:x ^ y
		
		System.out.println("x:"+x+",y:"+y);
		x = x ^ y;
		y = x ^ y; //x ^ y ^ y = x
		x = x ^ y; //x ^ y ^ x = y
		System.out.println("x:"+x+",y:"+y);
	}
}


    运行结果:
    
    左移运算
        3 << 3 = 24 相当于 3 * 2(3) = 24
        00000000000000000000000000000011
  (00)00000000000000000000000001100000
    代码:
class OperatorDemo3{
	public static void main(String [] args){
		System.out.println(3<<3);
	}
}
    运行结果:

    结论:
    左移几位其实就是该数据乘以2的几次方。
    <<:可以完成2的次幂运算。
    同理:左移几位其实就是该数据乘以2的几次方。
    >>和>>>的区别:
    >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
    >>>:无符号右移 无论最高位是0还是1,左边补齐0
    练习:最有效率的方式算出2乘以8等于几?
class OperatorDemo3 {
	public static void main(String[] args) {
		System.out.println(2 << 3);
	}
}

    运行结果:

1.6.6 三元运算符

    格式:
    (条件表达式) ? 表达式1 : 表达式2;
    如果条件为true,就把表达式1作为结果。
    如果条件为false,就把表达式2作为结果。

    示例:
class OperatorDemo{
	public static void main(String [] args){
		int x = 100;
		int y = 200;
		int z = x > y? x : y;
		System.out.println("z:"+z);
	}
}
    运行结果:

    练习:获取3个整数中的最大值
class OperatorTest{
	public static void main(String [] args){
		int x = 1;
		int y = 2;
		int z = 3;
		int temp = x > y? x : y;
		int max = temp > z? temp: z;
		System.out.println(z);
	}
}
    运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值