3.java运算符

算术运算符

算术运算符是对数值型的变量进行运算的。

常用算术运算符

所以 +运算符在java中表示三中含义:正号、加、字符串连接。

++ / % 运算符
java 复制代码
public class SuanshuYsf {
	public static void main(String[] args){
		//除法
		System.out.println(10 / 4); //从数学来看是2.5,实际是2
		double d1 = 10 / 4; // 10 / 4 = 2;  d1 = 2.0;
		System.out.println(d1); //2.0
		System.out.println(10.0 / 4);
		
		//取模(取余数) java中取模的本质是一个公式:
        //如果被除数<除数,取余就仍然是被除数。 1%3=1 2%5=2 -2%5=-2
        //如果被除数=除数,结果为0
        //如果被除数>除数
		//a % b = a - a / b x b
    	//如果 a 为小数时:a % b = a - (int)a / b x b
        //如果 a b 为小数时:a % b = a - (int)(a / b) x b
		System.out.println(10 % 3); // 1
        System.out.println(-10 % 3); // -1
        System.out.println(10 % -3); // 1
        System.out.println(-10 % -3); // -1
        System.out.println(-10.5 % 3); // -1.5
        System.out.println(-10.5 % -3); // -1.5
		
		//++
		//前++ 后++
		//作为独立运算时使用 ++i 和 i++ 没有任何区别
		int i = 1;
		++i; //i = i + 1;
		System.out.println(i); // 2
		i ++; //i = i + 1;
		System.out.println(i); // 3
		
		//如果作为混合运算时:
		//前++: j = ++i; 先自增,后执行动作 
		//后++: k = i++; 先执行动作(这里的赋值是先给临时变量,然后由临时变量付给变量),后自增。java的编译器在遇到i++和i--的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉。
        //
		int j = ++i;
		System.out.println("j = "+ j + " i =" + i); //j = 4; i = 4;
		int k = i++; //int tmp = i; i = i + 1; k = tmp;
		System.out.println("k = "+ j + " i =" + i); //k = 4; i = 5;
	}
}

关系运算符(比较运算符)

用于表示一个表达式结果的运算。关系运算符的结果是一个boolean 值。true或false

常用关系运算符
java 复制代码
int a = 6;
int b = 7;
boolean flag = a > b;

逻辑运算符

用于表示多个表达式结果的运算符,结果为一个boolean值。

常用逻辑运算符

分为两组:

  1. 短路与&& , 短路或||, 取反 !
  2. 逻辑与&,逻辑或|, 逻辑异或 ^

    运算规则:
    逻辑异或:当a和b不同是,则结果为true,否则为false;
短路与和逻辑与的区别

&&短路与: 如果第一个条件为false, 后边的条件不在去判断,结果为flase。效率高

&逻辑与: 不管第一个条件是否为false, 都会去判断后边的条件,结果为flase。效率低

java 复制代码
int a = 5;
int b = 8;
if(a < 2 && ++b > 6){
    System.out.println("ok");
}
System.out.println("a = "+ a +" b=" + b); // b = 8;
if(a < 2 & ++b > 6){
    System.out.println("ok");
}
System.out.println("a = "+ a +" b=" + b); //b = 9;
短路或和逻辑或

||短路或: 如果第一个条件为true, 后边的条件不在去判断,结果为true。效率高

|逻辑或: 不管第一个条件是否为true, 都会去判断后边的条件,结果为true。效率低

java 复制代码
int a = 5;
int b = 8;
if(a > 2 || ++b > 6){
    System.out.println("ok");
}
System.out.println("a = "+ a +" b=" + b); // b = 8;
if(a > 2 | ++b > 6){
    System.out.println("ok");
}
System.out.println("a = "+ a +" b=" + b); //b = 9;
取反操作(略)
逻辑异或(略)

赋值运算符

基本赋值运算符 int a = 15;

复合赋值运算符 a += b;a -= b;a *= b;a /= b;a %= b;

复合复制运算符会进行类型转换

java 复制代码
byte b = 2; 
b += 3;//这里有个细节 b = (byte)(b + 3)
b++; //b = (byte)(b + 1)

三元运算符

结果 = 布尔表达式?表达式1(true):表达式2(false)

java 复制代码
int a = 10;
int b = 99;
int result = a > b ? a++ : b++; //这里执行 b++时候,是先执行result = b; b = b + 1; 这里的b++并不是独立运算,是赋值运算。

**使用细节:**表达式1 和 表达式2 的类型要和赋值的变量类型一致或可以自动转换

三元运算符本质

java 复制代码
int result = a > b ? a++ : b++;
//本质是一个if else 语句
if(a>b){
    result = a++;
}else{
    result = b++;
}

三元运算符可以嵌套使用

java 复制代码
int result = (s > d ? c : e) > b ? a++ : b++;

运算符优先级

上表特点:

上边优先级大于下边

只有单目运算、赋值运算,从右向左。

位运算(一般密码学经常使用)

java 中有7个位运算分为两组(&、|、^、~、>>、<< 和 >>>),位运算是对二进制的操作。

&、|、^、~
  • 按位与& :

    复制代码
    n = 0 & 0; // 0
    n = 0 & 1; // 0
    n = 1 & 0; // 0
    n = 1 & 1; // 1
  • 按位或|:

    复制代码
    n = 0 | 0; // 0
    n = 0 | 1; // 1
    n = 1 | 0; // 1
    n = 1 | 1; // 1
  • 按位异或^:

    java 复制代码
    n = 0 ^ 0; // 0
    n = 0 ^ 1; // 1
    n = 1 ^ 0; // 1
    n = 1 ^ 1; // 0
  • 按位取反~: 0->1, 1->0。作用对象是一个二进制。
    2 & 3 示例:

    ~-2 示例:

~2 示例:

>>、<< 和 >>>
  1. 算术右移>>: 低位溢出,符号位不变,并用符号位补溢出的高位。
  2. 算术左移<<: 符号位不变,低位补0。
  3. >>> 逻辑右移也叫无符号右移, 规则是:低位溢出,高位补0。它的特点是不管符号位,右移后高位总是补0
  4. 特别说明:没有 <<<符号
java 复制代码
int a = 1 >> 2; //  ... 0000 0001 => ... 0000 0000 本质: 1 / 2 / 2 相当于向右边移动一位,1就除以2
int b = 1 << 2; //  ... 0000 0001 => ... 0000 0100 本质: 1 * 2 * 2 相当于向左边移动一位,1就乘以2
相关推荐
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,string类和标准模板库 — 完整知识点详解(16)
开发语言·c++·学习
qq_401700411 小时前
Qt 炫酷曲线,图表,2D/3D开源库
开发语言·qt
liangshanbo12151 小时前
面试题:线上 JavaScript 报错如何快速定位到源码?
开发语言·javascript·ecmascript
mjhcsp1 小时前
DeepSeek V4.1 Flash 批量处理效能实测
java·前端·数据库
weixin_440730502 小时前
迭代器Iterator(列表生成器、可迭代的如何生成迭代器)
开发语言·python
朝朝辞暮i2 小时前
C++ 第 31C 课:Subscriber 到底是什么
开发语言·c++·算法
海绵宝宝转agent2 小时前
操作系统八股开源笔记分享
java·面试
weixin_440730502 小时前
内置函数、json文本、pickle二进制
开发语言·python·json