• Java运算符


    /**
    * Java 运算符
    * Java基本数据类型的运算符:算术运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符、位运算符
    * 算术运算符:
    * 操作符 描述
    * + 加法 - 相加运算符两侧的值
    * - 减法 - 左操作数减去右操作数
    * * 乘法 - 相乘操作符两侧的值
    * / 除法 - 左操作数除以右操作数(注意:整数与整数相除,只保留整数部分)
    * % 取余 - 左操作数除以右操作数的余数
    * ++ 自增: 操作数的值增加1
    * -- 自减: 操作数的值减少1
    *
    * 自增、自减运算:
    * 前缀自增自减法(++i,--i): 先进行自增或者自减运算,再进行表达式运算
    * 前置自增:++i:首先变量i 会先加1(i=i+1),然后把i加完以后的值,作为++i整个表达式的值。(如:i=1,++i=2,i=2)
    * 前置自减:--i;首先i先减1(i=i-1),然后把减完以后的结果作为—i整个表达式的值。
    * 后缀自增自减法(i++,i--): 先进行表达式运算,再进行自增或者自减运算
    * 后置自增:i++:首先把i当前的值作为i++整个表达式的值,然后再给i加1。(如:i=1,i++=1,i=2)
    * 后置自减:i--;首先i当前值作为i—整个表达式的值,然后i再减1(i=i-1)
    * 数字和单个字符可以使用算术运算符。其中+,当用于字符串时,表示拼接。
    *
    * 赋值运算符:
    * 操作符 描述 例子
    * = 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C
    * += 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 C += A 等价于C = C + A
    * -= 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 C -= A 等价于C = C - A
    * *= 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 C *= A 等价于C = C * A
    * /= 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 C /= A,C 与 A 同类型时等价于 C = C / A
    * (%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 C %= A 等价于C = C%A
    * <<= 左移位赋值运算符 C <<= 2 等价于C = C << 2
    * >>= 右移位赋值运算符 C >>= 2 等价于C = C >> 2
    * &= 按位与赋值运算符 C&= 2 等价于C = C&2
    * ^= 按位异或赋值操作符 C ^= 2 等价于C = C ^ 2
    * |= 按位或赋值操作符 C |= 2 等价于C = C | 2
    * 注意:
    * 所有的赋值运算符的=左边一定是一个变量
    * 扩展赋值运算符=右边的计算结果的类型如果比左边的大的话会强制类型转换,所以结果可能有风险。
    * 扩展赋值运算符的计算:(1)赋值最后算(2)加载数据的顺序是把左边的变量的值先加载,再去与右边的表达式进行计算
    * 右边的常量值、表达式的值、变量的值的类型必须与左边的变量一致或兼容(可以实现自动类型转换)或使用强制类型转换可以成功。
    *
    * 关系运算符:
    * 运算符 描述 例子(A的值为10,变量B的值为20)
    * == 检查如果两个操作数的值是否相等,如果相等则条件为真。 (A == B)为假。
    * != 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 (A != B) 为真。
    * > 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 (A> B)为假。
    * < 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 (A <B)为真。
    * >= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 (A> = B)为假。
    * <= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 (A <= B)为真。
    * 注意:比较表达式的运算结果一定只有true/false
    * 比较表达式可以作为(1)条件(2)逻辑运算符的操作数
    * 字符串判断相等的时候,不要用==。用 .equals()方法。
    * java中进行基本数据类型比较的时候,比较的是直接存在内存中的值。
    * 进行类类型(比如String)的时候,比较的是内存中的地址。
    * 推荐写法:"roy".equals(s2);
    * 其他的比较运算符都是只能用于8种基本数据类型。其中的==和!=可以用于引用数据类型的比较,用于比较对象的地址。
    *
    * 逻辑运算符:
    * 逻辑运算符的操作数必须是布尔值,结果也是布尔值
    * 逻辑与:&
    * 运算规则:只有左右两边都为true,结果才为true。
    * 例如:true & true 结果为true
    * false & true 结果为false
    * true & false 结果为false
    * false & false 结果为false
    * 逻辑或:|
    * 运算规则:只要左右两边有一个为true,结果就为true。
    * 例如:true | true 结果为true
    * false | true 结果为true
    * true | false 结果为true
    * false | false 结果为false
    * 逻辑异或:^
    * 运算规则:只有左右两边不同,结果才为true。
    * 例如:true ^ true 结果为false
    * false ^ true 结果为true
    * true ^ false 结果为true
    * false ^ false 结果为false
    * 逻辑非:!
    * 运算规则:布尔值取反
    * 例如:!true 为false
    * !false 为true
    * 短路与:&&
    * 运算规则:只有左右两边都为true,结果才为true。
    * 例如:true & true 结果为true
    * true & false 结果为false
    * false & ? 结果就为false
    * 它和逻辑与不同的是当&&左边为false时,右边就不看了。
    * 短路或:||
    * 运算规则:只要左右两边有一个为true,结果就为true。
    * 例如:true || ? 结果为treu
    * false || true 结果为true
    * false || false 结果为false
    * 它和逻辑或不同的是当||左边为true时,右边就不看了。
    *
    * 条件运算符(?:):
    * 条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量
    * variable x = (expression) ? value if true : value if false
    * 运算规则:整个表达式的结果:当条件表达式为true时,就取结果表达式1的值,否则就取结果表达式2的值
    *
    * 位运算符:
    * 操作符 描述 例子( A 的值为 60 和变量 B 的值为 13)
    * & 如果相对应位都是1,则结果为1,否则为0 (A&B),得到12,即0000 1100
    * | 如果相对应位都是 0,则结果为 0,否则为 1 (A | B)得到61,即 0011 1101
    * ^ 如果相对应位值相同,则结果为0,否则为1 (A ^ B)得到49,即 0011 0001
    * 〜 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 (〜A)得到-61,即1100 0011
    * << 按位左移运算符。左操作数按位左移右操作数指定的位数。 A << 2得到240,即 1111 0000
    * 运算规则:左移几位就相当于乘以2的几次方
    * >> 按位右移运算符。左操作数按位右移右操作数指定的位数。 A >> 2得到15即 1111
    * 运算规则:右移几位就相当于除以2的几次方
    * >>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 A>>>2得到15即0000 1111
    * 运算规则:往右移动后,左边空出来的位直接补0,不看符号位
    * 如何区分&,|,^是逻辑运算符还是位运算符?如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符。
    *
    * instanceof 运算符
    * 该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
    * instanceof运算符使用格式如下:( Object reference variable ) instanceof (class/interface type)
    * 例子:
    * String name = "James";
    * boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
    *
    * Java运算符优先级:
    * 下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
    * 类别 操作符 关联性
    * 后缀 () [] . (点操作符) 左到右
    * 一元 expr++ expr-- 从左到右
    * 一元 ++expr --expr + - ~ ! 从右到左
    * 乘性 * /% 左到右
    * 加性 + - 左到右
    * 移位 >> >>> << 左到右
    * 关系 > >= < <= 左到右
    * 相等 == != 左到右
    * 按位与 & 左到右
    * 按位异或 ^ 左到右
    * 按位或 | 左到右
    * 逻辑与 && 左到右
    * 逻辑或 || 左到右
    * 条件 ?: 从右到左
    * 赋值 = + = - = * = / =%= >> = << =&= ^ = | = 从右到左
    * 逗号 , 左到右
    *
    * 优先级:
    * 1、()最高
    * 2、自增自减的运算符,是一元运算符(单目运算符)以及 !非运算和~按位取反运算。
    * 3、四则运算 。
    * 4、位移运算。 << >>
    * 5、关系运算。 == != <=
    * 6、逻辑运算。
    * 7、赋值运算。
    * 8、逗号。
    *
    */
  • 相关阅读:
    BZOJ1146:[CTSC2008]网络管理
    AtCoder Grand Contest 004 C:AND Grid
    BZOJ3295:[CQOI2011]动态逆序对
    AtCoder Regular Contest 070F:Honest Or Unkind
    BZOJ3110:[ZJOI2013]K大数查询
    BZOJ3196:二逼平衡树
    浅谈splay
    BZOJ3938:Robot
    浅谈标记永久化
    AtCoder Regular Contest 068E:Snuke Line
  • 原文地址:https://www.cnblogs.com/leeho/p/14183738.html
Copyright © 2020-2023  润新知