java基礎之運算符

1. 算術運算符

概念

  1. "+" 加法運算符
  2. "-" 減法運算符
  3. "*" 乘法運算符
  4. "/" 除法運算符
  5. "%" 求余/取模運算符

實踐出真理

int ia = 5;
int ib = 16;

System.out.println(" +  運算符 : " + (ia + ib));   //  21
System.out.println(" -  運算符 : " + (ia - ib));   //  -11
System.out.println(" *  運算符 : " + (ia * ib));   //  80
System.out.println(" /  運算符 : " + (ia / ib));   //  0
System.out.println(" %  運算符 : " + (ib % ia));   //  1

注意事項

//當兩個整數(shù)相除時結果只保留整數(shù)部分,丟棄小數(shù)部分
System.out.println((5 / 2));      // 2

//保留小數(shù)方式一:
System.out.println((double) 5 / 2);
System.out.println(5 / (double) 2);
System.out.println((double) 5 / (double) 2);
//無效處理
System.out.println((double) (5 / 2));
//方式二: 
System.out.println(ia * 1.0 / ib);      //通過 1.0 改變原來數(shù)據(jù)的類型

// 0 不能作除數(shù)
System.out.println(ia * 1.0 / 0);  //可以通過編譯遂跟,運行時發(fā)生 java.lang.ArithmeticExcetion(算術異常/Infinity) by zero

System.out.println(ia * 1.0 / 0.0);     // Infinity 無窮
System.out.println(0.0 / 0.0);          // NaN(Not a Number)

應用

  • 通過輸入一個正整數(shù)類型的秒數(shù)洪橘,通過拆分秒數(shù)后輸出x小時x分鐘x秒
    System.out.println("請輸入一個正整數(shù): ");
    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    
    int hour = num / 3600;
    int minute = num % 3600 / 60;
    int second = num % 60;
    
    System.out.println(num + "轉(zhuǎn)換為: " + hour + "小時" + minute + "分鐘" + second + "秒");
    
  • 結果


    轉(zhuǎn)換為時分秒.png

2. 字符串連接運算符"+"

  • "+" 可以實現(xiàn)字符串的連接,同時可以實現(xiàn)字符串與其他數(shù)據(jù)類型“相連”

實踐出真理

此處代碼接拆分整數(shù)應用代碼

  // 區(qū)分 "+"作為加法運算符與字符串連接符
  // 當 "+" 兩邊的操作數(shù)中有一個操作數(shù)是字符串類型粱锐,則該"+"就被當做字符串連接符處理疫衩;否則當做 加法運算符處理

 System.out.println(hour + minute + second);   //當做 加法運算進行相加
 System.out.println(hour + minute + second + "A");   //hour壮莹、minute翅帜、second進行算術相加后的數(shù)值當做字符串連接 "A"
 System.out.println(hour + minute + "A" + second);   //hour、minute進行加法運算后連接"A"后連接second
 System.out.println(hour + "A" + minute + second);   
 System.out.println("A" + hour + minute + second);
 System.out.println("A" + (hour + minute + second));

結果


連接運算符時.png

3. 關系/比較 運算符

概念

  1. ">" 是否大于
  2. ">=" 是否大于等于
  3. "<" 是否小于
  4. "<= " 是否小于等于
  5. "==" 是否等于
  6. "!=" 是否不等于

實踐出真理

int ia = 5;
int ib = 3;

System.out.println(ia < ib);        //false
System.out.println(ia <= ib);       //false
System.out.println(ia > ib);        //true
System.out.println(ia >= ib);       //true
System.out.println(ia == ib);       //false
System.out.println(ia != ib);       //true

應用示例

//判斷輸入的整數(shù)是否為負數(shù)
System.out.println("請輸入任意一個整數(shù)");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();

boolean b = num >= 0;
System.out.println(b ? "輸入的數(shù)字為正整數(shù)" : "輸入的整數(shù)為負數(shù)");

結果


Snipaste_2021-06-05_18-34-16.png

4. 自增減運算符

  1. ++ 自增運算符 當前變量的數(shù)值 +1
  2. -- 自減運算符 當前變量的數(shù)值 -1
  3. C涝滴!只能用于變量 ,常數(shù)不可以V芗觥狭莱!

實踐出真理

int ia = 8;

System.out.println("當前ia的值為:"+ia);               // 8
ia++;
System.out.println("自增運算符后的結果為: "+ia);       // 9
++ia;
System.out.println("自增運算符后的結果為: "+ia);       // 10
ia=10;
ia--;
System.out.println("自減運算符后的結果為: "+ia);        // 9
--ia;
System.out.println("自增運算符后的結果為: "+ia);         //8

System.out.println(ia++ + ++ia);                        // 18 (8+10)

i++ 與 ++i 的區(qū)別

  1. i++ 與 ++i 表示不同的含義,占用不同的內(nèi)存空間
  2. i++ 先賦值再運算
    表示先讓 i 的數(shù)值作為整個表達式的最終結果概作,再讓 i 變量自身的數(shù)值 +1腋妙;
    a = i++ 先賦值 a = i,后運算 i= i+1 ,最終的結果 a == i++ 運算前的數(shù)值
  3. ++i 先運算后賦值
    表示先讓變量 i 的數(shù)值+1 讯榕,然后再讓變量的數(shù)值作為整個表達式的結果
    a = ++i 先運算 i=i+1,后賦值 a = i,最終的結果為 i=i+1后的結果

i++ 與 ++i 執(zhí)行效率上的區(qū)別

分析

  • 總結
    只有在必要時才使用后置操作符
    因為前置操作需要做的工作更少骤素,只需要加1后返回加1后的結果即可。而后置操作符則必須先保存操作數(shù)原來的值愚屁,以便返回未加1之前的值作為操作的結果济竹。對于int對象和指針,編譯器可優(yōu)化掉這項額外工作霎槐。但是對于更多的復雜迭代器類型送浊,這種額外工作可能會花費更大代價

5. 邏輯運算符

概念

  1. && :and 表示邏輯 運算符
    • 同真為真(true && true:結果為true),一假為假(false&&true:結果為false)
    • 只有當兩個條件同為 true 時丘跌,結果才為:true
  2. || :or 表示邏輯 運算符
    • 一真為真(true || true:結果為true)袭景,同假為假(false||false:結果為false)
    • 只有當兩個條件同為 false時唁桩,結果才為:false
  3. ! :not 表示邏輯 運算符
    • 取反 為 true 時結果為:false;為 false 時結果為 true
  • 邏輯運算符


    邏輯運算符
  • 實踐出真理

 //邏輯運算符的操作數(shù)均為 boolean 類型
    boolean b1 = true
    boolean b2 = false 

    System.out.println( b1 && b2)   // false
    System.out.println( b1 || b2)   // true
    System.out.println(  !b1 )      // false
    System.out.println(  !b2)       // true

短路特性

  • && 邏輯與
    若第一個表達式為 false耸棒,則結果為false:此時 跳過 第二個表達式
    int left = 3
    int right = 5
    
    boolean jude_and = left==right && (++right==6)
    System.out.println( "判斷的結果為:"+ jude_and +"/n"+ left +" ::: "+ right)     
    // 判斷的結果為: false  3  5
    // 此情況下第二個表達式 ++right==6 因為短路特性并沒有執(zhí)行
    
  • || 邏輯或
    若第一個表達式為 true 荒澡,則結果為 true:此時 跳過 第二個表達式
    int left = 3
    int right = 5
    
    boolean jude_and = left==3 && (++right==6)
    System.out.println( "判斷的結果為:"+ jude_and +"/n"+ left +" ::: "+ right)     
    // 判斷的結果為: true  3  5
    // 此情況下第二個表達式 ++right==6 因為短路特性并沒有執(zhí)行
    

應用示例

//判斷一個數(shù)字是否為三位數(shù)
System.out.println("請輸入一個正整數(shù):  ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt(); 
        
System.out.println(100<=num && num<=999); 

運行截圖


是否為正整數(shù).png

6. 三目運算符(條件運算符)

概念

  • 條件表達式?表達式1:表達式2
  • 判斷條件表達式是否成立与殃,若成立則執(zhí)行表達式1单山,否則執(zhí)行表達式2

示例

  1. 判斷一個整數(shù)是否是三位數(shù)

    System.out.println("請輸入一個正整數(shù):  ");
    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    System.out.println(num + (100<=num && num<=999?":是三位數(shù)":":不是三位數(shù)"));
    

    運行結果:


    是否是三位數(shù)
  2. 查找最大的值

    System.out.println("請輸入兩個正整數(shù):  ");
    Scanner sc = new Scanner(System.in);
    int a = sc.nextInt();
    int b = sc.nextInt();
    
    int maxNum = a > b ? a : b;
    System.out.println("輸入的兩個整數(shù)中最大的是: " + maxNum);
    

    運行結果 :


    大的值

7. 賦值運算符

單一運算符

  • "="
  1. 賦值運算符,將右邊的數(shù)據(jù)(值)賦值給 = 左邊的變量幅疼,覆蓋變量原來的值
  2. 賦值表達式本身也有值米奸,其本身值即為所賦之值

復合運算符

  • "+=、-=爽篷、*=躏升、/="

實踐出真理

int testNumT = 5;
System.out.println("初始的值為: " + testNumT);
System.out.println("表達式的值為: " + (testNumT = 5));     //表達式的值為: 5
testNumT = 6;
System.out.println("單一賦值運算符 = :" + testNumT);  //單一賦值運算符 = :6
System.out.println("---------復合運算符--------");
testNumT += 1;
System.out.println("復合運算符 += : " + testNumT);    // 復合運算符 += :7
testNumT -= 1;
System.out.println("復合運算符 -= : " + testNumT);    // 復合運算符 -= :6
testNumT *= 3;
System.out.println("復合運算符 *= : " + testNumT);    // 復合運算符 *= :18
testNumT /= 6;
System.out.println("復合運算符 /= : " + testNumT);    // 復合運算符 /= :3

補充內(nèi)容

  • byte轉(zhuǎn)int
    byte b = 3;
    //b=b+2;            //錯誤: 從int轉(zhuǎn)換到byte可能會有損失 【byte】最大值為:127
    //b= b+(byte)2;     //錯誤: 從int轉(zhuǎn)換到byte可能會有損失
    b += 2;             //等價于 b= (byte)(b+2);
    System.out.println("當前b的值為: " + b);
    
  • "="與 "==" 比較
    int ia = 3;
    ia == 2;   //判斷變量 ia 的數(shù)值是否等于3
    2 == ia;   //判斷2是否等于變量ia的數(shù)值  
    //以上兩種方式從結果看一樣的,推薦實際中采用第二種方式
    ia = 2;   //將2賦值給變量ia狼忱,覆蓋ia原來的值
    //2 = ia //錯誤:意外的類型  2為數(shù)值,不可以當作變量使用
    

8. 移位運算符

概念

  • 通過移動二進制位的操作

<< 左移運算符

  • 將數(shù)據(jù)的二進制位向左移動一睁,右邊使用 0 補充
  • 實踐出真理
    byte b_Shift = 13;
    System.out.println(b_Shift << 1);     //26
    System.out.println(b_Shift << 2);     //52
    
  • 過程分析
    13的二進制為: 0000 1101
    向左移動一位后為: 0001 1010
    0001 1010 轉(zhuǎn)換為十進制 : 0+12^1+0+123+1*24 = 0+2+0+8+16 = 26

應用(效果)

  • 左移 1 位 相當于當前的 數(shù)值*2
  • 左移 2 位 相當于當前的 數(shù)值*4

>> 右移運算符

  • 將數(shù)據(jù)的二進制向右移動钻弄,左邊使用 符號位 補充
    byte b_Shift = 13;
    System.out.println(b_Shift >> 1);     //6
    System.out.println(b_Shift >> 2);     //3
    

應用(效果)

  • 左移 1 位 相當于當前的 數(shù)值/2
  • 左移 2 位 相當于當前的 數(shù)值/4

>>> 邏輯右移運算符

  • 或稱為:無符號右移運算符(無符號右移等同于非負數(shù)時的 ">>")
  • 將數(shù)據(jù)的二進制位向右移動,左邊使用 0 補充

9. 位運算符

概念

  • & 按位 運算符 同 1 為 1 者吁,同 0 為 0 如果相對應位都是1窘俺,則結果為1,否則為0
  • | 按位 運算符 -1 為 1 复凳,同 0 為 0 如果相對應位都是 0瘤泪,則結果為 0,否則為 1
  • ~ 按位 取反 運算符 按照二進制位進行取反育八, 1 為 0 对途,0 為 1 按位取反運算符翻轉(zhuǎn)操作數(shù)的每一位,即0變成1髓棋,1變成0
  • ^ 按位 異或 運算符 按照二進制進行異或運算 实檀,同為 0 ,不同為 1 如果相對應位值相同按声,則結果為0膳犹,否則為1

實踐

byte b1 = 11;   // 0000 1011
byte b2 = 13;   // 0000 1101

// & 按位 與
System.out.println(b1 & b2);    // 9
// | 按位 或
System.out.println(b1 | b2);     // 15
// ~ 按位 取反
System.out.println(~b1);          // -12
// ^ 按位 異或
System.out.println(b1 ^ b2);        // 6

10.運算符優(yōu)先級

  • 最高優(yōu)先級的運算符在的表的最上面,最低優(yōu)先級的在表的底部


    運算符優(yōu)先級
  • 總結

  1. ()的優(yōu)先級極高
  2. =的優(yōu)先級極低
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末签则,一起剝皮案震驚了整個濱河市须床,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渐裂,老刑警劉巖豺旬,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钠惩,死亡現(xiàn)場離奇詭異,居然都是意外死亡哈垢,警方通過查閱死者的電腦和手機妻柒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耘分,“玉大人举塔,你說我怎么就攤上這事∏筇” “怎么了央渣?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渴频。 經(jīng)常有香客問我芽丹,道長,這世上最難降的妖魔是什么卜朗? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任拔第,我火速辦了婚禮,結果婚禮上场钉,老公的妹妹穿的比我還像新娘蚊俺。我一直安慰自己,他們只是感情好逛万,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布泳猬。 她就那樣靜靜地躺著,像睡著了一般宇植。 火紅的嫁衣襯著肌膚如雪得封。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天指郁,我揣著相機與錄音忙上,去河邊找鬼。 笑死坡氯,一個胖子當著我的面吹牛晨横,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播箫柳,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼手形,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悯恍?” 一聲冷哼從身側響起库糠,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瞬欧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贷屎,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年艘虎,在試婚紗的時候發(fā)現(xiàn)自己被綠了唉侄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡野建,死狀恐怖属划,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情候生,我是刑警寧澤同眯,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站唯鸭,受9級特大地震影響须蜗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜目溉,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一明肮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缭付,春花似錦晤愧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽只厘。三九已至烙丛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羔味,已是汗流浹背河咽。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赋元,地道東北人忘蟹。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像搁凸,于是被迫代替她去往敵國和親媚值。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容