Java运算符

表达式与运算符

表达式
  • 表达式由运算符和操作数组成,根据运算符也可分为单目表达式、双目表达式、三目表达式
  • 计算:表达式的结果是以最大类型的操作数为标准,其他小类型自动转换成最大类型然后进行运算。
  • 例如:int a,b = 3; double c = 3.5; double d = a + b + c; //结果为double类型
  • 注意:这些都是表达式 -> 5、num1、num1 + num2、sum = num1 + num2
运算符

主要包含算术运算符, 赋值运算符, 关系运算符, 逻辑运算符, 条件运算符, 位运算符

算术运算符

  • 算术运算符主要用于基本的算术运算,如加减乘除等
  • 包括:加(+) 减(-) 乘(*) 除(/) 取模(%) 自加(++) 自减(--)
  • +的用法:a.加号;b.正号; c.字符串连接符,如:""+10+5 //105
  • 除法:两个int相除结果为整型,13/5 -> 2 、13.0/5 -> 2.6
  • 取模:13%5 -> 3 、13.5/5 -> 3.5
自增自减运算符

x++ 是先赋值后自增,x-- 同理;++x 是先自增后赋值,--x 同理
示例:int x = 4; int y = (x++)+5; //y的结果为9,x先进行加法然后赋值,最后在自增

赋值运算符

格式:变量 = 表达式;
注意:赋值运算符是从右往左运算,赋值运算符的左边不能是常量
例如:int n = 5; //将5赋值给变量n int m = n; //将变量n的值赋值给变量m

复合赋值运算符

关系运算符

  • 比较运算符用于判断两个数据的大小,主要用于条件和循环语句中的判断条件
  • 包括:==、!=、>、<、>=、<=,运算结果为boolean值,即true或者false
  • 'A' > 'B' 结果为false,比较的是两个字符的ASCII值
    true == false 结果为false,两个布尔值不相等
    float f = 5.0f; long l = 5; f==l; 结果为true,浮点数与整数比较,只要值相等就为true

逻辑运算符

  • 逻辑运算符用来连接一个或多个条件,判断这些条件是否成立
  • 包括:AND(&&)、OR(||)、NOT(!)、异或(^)、& 、|
  • 运算结果为boolean值,即true或者false
  • 注意:逻辑运算符的操作数operator都是布尔类型的
  • 逻辑"与"运算符,必须左右两个条件都为true才为true
  • 逻辑"或"运算符,左右任一条件为true则为true
  • 逻辑"非"运算符,对原条件进行取反,操作数为true结果为false,操作数为false结果为true

区分&& 与 &:
&&运算符又叫短路运算符,如果第一个表达式的值就能决定表达式最后的结果,运算符右边的表达式就不再计算了,而&则都会计算。同理 || 叫做短路或,a || b 一旦a为true则b不在进行判断,而 | 都要进行判断。
例如:
int n = 3; boolean b=(3 > 7)&&((n++)<2)
=> b=false,n=3(不会自增)

条件运算符

  • java中的条件运算符是三目运算符(三元运算符)
  • 语法:布尔表达式 ?表达式1 : 表达式2,如:3 > 2 ? a : b 输出为a
    当布尔表达式的值为true时,返回表达式1的值,否则返回表达式2的值
  • 示例:计算3个数最大值 -> int max = (x > y ? (x>z ? x: z) : (y>z ? y : z));
  • 单目运算符 ++,--
  • 双目运算符 +,-,*,/,&&,>,>=, ==, !=等

注意:三元运算符实现的,都可以采用if语句实现。反之不成立。
当if语句控制的操作是一个输出语句的时候就不能使用三元运算符。因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出语句。

运算符的优先级

以下运算符优先级从高到底,实际使用运算符根据逻辑多添加括号增加可读性且不容易出错
整体优先级:算术运算符>关系运算符>逻辑运算符>赋值运算符 一元>二元>三元运算符

位运算符(扩展)

  • 位运算是直接对二进制补码进行运算
  • 包含:&(与),|(或),^(异或) , ~(按位取反) ,<<(左移) ,>>(右移) ,>>>(无符号右移)
  • "<<": 左移 左边最高位丢弃,右边补齐0
  • ">>": 右移 最高位是0,左边就补0;最高位是1,左边补齐1
  • ">>>": 无符号右移 无论最高位是 0还是1,左边补齐0
运算规律
  • 位异或特点,某个数据异或另一个数据两次得到的结果是其本身。
    a ^ b ^ b = a
  • &: 有0则0; |: 有1则1; ^: 相同则0不同则1;~: 按位取反
  • "<<": 把<<左边的数据乘以2的移动次幂
  • ">>": 把>>左边的数据除以2的移动次幂

示例一:

public static void main(String[] args) {
    int a = 3;
    int b = 4;
    System.out.println(a & b);   
    System.out.println(a | b);
    System.out.println(a ^ b);
    System.out.println( ~ a);
}  
    /*int a  3 0b11  4个字节
      原码 00000000 00000000 00000000 00000011
      补码 00000000 00000000 00000000 00000011
      int b  4 0b100  4个字节
      原码 00000000 00000000 00000000 00000100
      补码 00000000 00000000 00000000 00000100

      位与&  有0则0 
       00000000 00000000 00000000 00000011
&      00000000 00000000 00000000 00000100
--------------------------------------------------
       00000000 00000000 00000000 00000000  补码
  原码 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 
      符号位-
      结果  -4 
*/

示例二:

public static void main(String[] args) {
    //左移相当于把<<左边的数乘以2的移动次方(幂)
    System.out.println(3<<2);//12=3*4=3*2^2
    
    //右移相当于把>>左边的数除以2的移动次方(幂)
     System.out.println(24>>2);//24/4=6
     System.out.println(24>>>2);//24/4=6

     System.out.println(-24>>2);//-24/4=-6
}

示例三:计算-15 >>> 2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • Java运算符: 目录:1.算术运算符2.位运算符3.赋值运算符4.比较运算符5.逻辑运算符6.三目运算符7.运算...
    Ansaxnsy阅读 5,174评论 4 3
  • 7. Java运算符 👯转载请保留原文链接:http://dashidan.com/article/java/ba...
    ef6a1aa99b35阅读 366评论 0 0
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,115评论 0 13
  • 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把...
    海人为记阅读 121评论 0 0
  • 第五章 二 目标与幸福 传统观点告诉我们,幸福就是达到目标,而实际上虽然在目标达到之后会感到满足,无法达到时容易感...
    琴音_李艳琴阅读 229评论 0 0