zoukankan      html  css  js  c++  java
  • 08_运算符

    运算符

    一. 算数运算符

    概念:两个操作数进行计算

    • +-*/%

    一元运算符:只有一个操作数

    • ++,--

    前++:先++,再赋值

    后++:先赋值,再++

    public class TestOperation1{
    	
    	public static void main(String[] args){
    		int a = 10;		
    		int b = 3;
    		
    		System.out.println(a / b);//求商 = 3
    		System.out.println(a % b);//求余 = 1
    		
    		double d = 10.0;	
    		int c = 3;
    		
    		System.out.println(d / c);//求商3..33...
    		
    		int num1 = 10;	
    		num1++;//自增1
    		
    		System.out.println(num1);//11
    		
    		int num2 = 10;	
    		num2--;//自减1
    		
    		System.out.println(num2);//9
    		
    		int num3 = 5;
    		
    		//前++:先++,再打印自增后的值
    		//后++:先打印当前值,再++
    		
    		System.out.println(++num3);//6
    		
    		System.out.println(num3);//6
    		
    		int num4 = 100;
    		
    		//前++:先++,再赋值
    		//后++:先赋值,再++
    		
    		int num5 = num4++;
    		
    		System.out.println(num5);//100
    		
    		System.out.println(num4);//101
    		
    		
    	}
    	
    }
    

    二. 赋值运算符

    概念:等号右边赋值给等号左边

    • = 直接赋值
    • += 求和后赋值
    • -= 求差后赋值
    • *= 求积后赋值
    • /= 求商后赋值
    • %= 求余后赋值
    public class TestOperation2{
    	
    	public static void main(String[] args){
    		
    		int a = 10;//赋值运算符
    		
    		a += 5;//在a基础上+5  a = a + 5
    		
    		System.out.println(a);//15
    		
    		int b =20;
    		
    		b -= 3;//b = b - 3
    		
    		System.out.println(b);//17
    		
    		int c = 30;
    		
    		c %= 4;//c = c % 4
    		
    		System.out.println(c);//2
    	}
    	
    }
    

    三. 关系运算符

    概念:两个操作数进行比较

    • >
    • <
    • >=
    • <=
    • ==
    • !=
    public class TestOperation3{
    	
    	public static void main(String[] args){
    		
    		int a = 10;
    		
    		int b = 6;
    		
    		System.out.println(a > b);//true
    		
    		System.out.println(a < b);//false
    		
    		System.out.println(a >= b);//true
    		
    		System.out.println(a <= b);//false
    		
    		System.out.println(a == b);//false
    		
    		System.out.println(a != b);//true
    	}
    }
    

    四. 逻辑运算符

    概念:两个boolean类型的操作数或表达式进行逻辑比较

    • && 与(并且)
    • || 或(或者)
    • ! 非(相反)
    public class TestOperation4{
    	
    	public static void main(String[] args){
    		
    		int javaScore  =100;
    		
    		int webScore = 99;
    		
    		//比较两者是否相等
    		System.out.println(javaScore == webScore);//false
    		
    		//分别判断两者是否为满分
    		System.out.println(javaScore == 100);//true
    		System.out.println(webScore == 100);//false
    		
    		//一次性判断二者是否均为满分
    		System.out.println(javaScore == 100 && webScore == 100);//false
    		
    		boolean result = javaScore == 100;
    		
    		//java的成绩是满分吗?
    		System.out.println(result);//true
    		
    		//java的成绩不是满分吗?
    		System.out.println(!result);//false
    	}
    }
    

    五. 位运算符

    位运算符用于处理整型和字符型的操作数,对其内存进行操作,数据在内存中以二进制形式表示

    • 主要有~(按位取反)、&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)、>>>(无符号右移)
    public class TestOperation6 {
    
        public static void main(String[] args) {
    
            //位运算符(效率极高)
            //主要有~(按位取反)、&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)、>>>(无符号右移)
    		/*
    
    		<<	*2
    		>>	/2
    
    		0000 0001	1
    		0000 0010	2
    		0000 0100	4
    		0000 1000	8
    		0001 0000	16
    		0010 0000	32
    		0100 0000	64
    		1000 0000	128
    		*/
            //1. 与(&) 如果两个二进制位都是1,则与用算的结果为1,其他全都为0
            short a = 128;// 128二进制表现为1000 0000
            short b = 129;// 129二进制表现为1000 0001
            short c = -128;
            System.out.println("a和b'与'的结果是: " + (a & b));// 128(1000 0000)
    
            //2. 或(|) 如果两个二进制位都是0,则与运算的结果为0,其他全都为1
            // 即只要其中一个数字的二进制位是1,这个二进制位的运算结果就为1
            System.out.println("a和b'或'的结果是: " + (a | b));// 129(1000 0001)
    
            //3. 非(~) 如果二进制是0,则取反为1,如果二进制是1,则取反为0
            System.out.println("'非'a的结果是: " + ~a);// -129 (128 + 1 = 129 然后取负为-129)
            System.out.println("'非'b的结果是: " + ~b);// -130 (129 + 1 = 130 然后取负为-130)
            System.out.println("'非'c的结果是: " + ~c);//  127 (-128 + 1 = -127 然后取负为127)
    
            //4. 异或(^) 如果二进制位相同,则结果为0,否则为1
            System.out.println("a和b'异或'的结果是: " + (a ^ b));// 1(0000 0001)
    
            //5. 左移
            //移位可实现整数乘以或除以2的n次方的效果(左乘右除)
            System.out.println(2 << 3);//16 (2的一次方 往左移动三位 等同于于2 * (2的三次方) = 2 * 8 = 16)
            int i = 'a';
            System.out.println(i);//97
            System.out.println(i << 2);//388 (97 * 4 = 388)
    
            //6. 右移
            System.out.println(8 >> 2);//2  (8的一次方 往右移动两位 变为 8 / (2的平方) = 8 / 4 = 2)
    
        }
    }
    /**
     * 1. (正数(首位为0)的原反补码都一样)
     * 2. (负数(首位为1)的  反码:符号位不变, 后面取反, 补码:反码基础上加1)
     *
     *
     * 情况1:(求出补码首位为0(正数的原,反,补码都一样))
     * step1 -> -2原码:1000  0010
     * step2 -> -2反码:1111  1101
     * step3 -> -2补码:1111  1110
     * step4 -> 对-2的补码进行取反即可得到~(-2)的补码
     * step5 -> ~(-2)补码:0000  0001
     * step6 -> 由于符号位为0表示正数,因此补码和源码一样。转换为十进制就是1
     *
     * 情况2:求出补码首位为1(得将补码还原成原码)
     *     假如符号位为1则得先将补码转换成反码,再转换成原码
     *     例如:
     * 		   (6)原码:0000 0110
     *         (6)反码:0000 0110
     *         (6)补码:0000 0110
     *         
     *         ~(6)补码:1111 1001
     *         ~(6)反码:1111 1000
     *         ~(6)原码:1000 0111   (-7)
     *
     *
     */
    

    六. 三元运算符

    概念:将判断后的结果赋值给变量

    • ?:(布尔表达式?结果1 :结果2)当表达式为真获得结果1,反之获得结果2
    public class TestOperation5{
    	
    	public static void main(String[] args){
    		
    		//1.判断
    		//2.赋值
    		//布尔表达式?值1:值2
    		
    		int javaScore = 100;
    		
    		String result = javaScore == 100 ? "恭喜" : "加油";
    		
    		System.out.println(result);//恭喜
    		
    		int webScore = 99;
    		
    		int result2 = webScore == 100 ? 666 : 111;
    		
    		System.out.println(result2);//111
    	} 
    }
    

    自动类型提升

    进行算数运算时:

    1. 两个操作数有一个为double,计算结果提升为double
    2. 如果操作数中没有double,有一个为float,计算结果提升为float
    3. 如果操作数中没有float,有一个为long,计算结果提升为long
    4. 如果操作数中没有long,有一个为int,计算结果提升为int
    5. 如果操作数中没有int,均为short或byte,计算结果仍旧提升为int
    6. 特殊:任何类型与String相加(+)时,实为拼接,其结果自动提升为String
    public class TestTypeRaise{
    	
    	public static void main(String[] args){
    		
    		double d1 = 10.0;
    		
    		int i1 = 5;
    		
    		double d2 = d1 + i1;
    		
    		System.out.println(d2);//15.0
    		
    		//-----------------------------------------
    		
    		float f1 = 5.0F;
    		
    		short s1 = 20;
    		
    		float f2 = f1 + s1;
    		
    		System.out.println(f2);25.0
    		
    		int i2 = 5;
    		
    		long l1 = 10L;
    		
    		long l2 = i2 + l1;
    		System.out.println(l2);//15
    		
    		//特殊:String的字符串拼接
    		
    		String str = "Hello";
    		
    		int i3 = 123;
    		
    		String str2 = str + i3;
    		
    		System.out.println(str2);//Hello123
    		
    		int javaScore = 100;
    		
    		String str3 = "java的成绩是:" + javaScore;
    
    		System.out.println(str3);//java的成绩是:100
    		
    		System.out.println("java的成绩是:" + javaScore);//java的成绩是:100
    		
    		
    	}
    }
    
  • 相关阅读:
    JS实现继承的几种方式
    网站与域名知识扫盲-符号标签大全
    网站与域名知识扫盲
    第八届蓝桥杯决赛 发现环
    1014. Waiting in Line (模拟)
    第八届蓝桥杯决赛 对局匹配
    nvm安装nodejs(安装在非系统盘内)
    jquery datatable 获取当前分页的数据
    高德地图--轨迹回放(一)
    html5shiv.js和respond.js引入不起作用解决
  • 原文地址:https://www.cnblogs.com/MRASdoubleZ/p/14358923.html
Copyright © 2011-2022 走看看