91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

《Java架構筑基》從Java基礎講起——Java運算符

發布時間:2020-06-06 10:49:27 來源:網絡 閱讀:149 作者:未來可期_ 欄目:編程語言

1. 有哪些運算符

Java提供了豐富的運算符,可以將之分為四種:算術運算符、位運算符、關系運算符、邏輯運算符

2. 算術運算符

算術運算符的操作對象必須是數值類型,不能為boolean類型使用算術運算符,但是可以為char類型使用算術運算符。因為在Java中,char類型在本質上是int的子集。 |運算符|含義| |:--:|:--:| |+|加法(也是一元加號)| |-|減法(也是一元減號)| ||乘法| |/|除法| |%|求模| |++|自增| |- -|自減| |+=|加并賦值| |-=|減并賦值| |=|乘并賦值| |/=|除并賦值| |%=|求模并賦值|

3. 位運算符

Java定義了幾個位運算符,可用于整數類型——long,int,short,char和byte。 |運算符|含義| |:--:|:--:| |~|按位一元取反| |&|按位與| |||按位或| |^|按位異或| |>>|右移| |>>>|右移零填充| |<<|左移| |&=|按位與并賦值| | |= |按位或并賦值| |^=|按位異或并賦值| |>>=|右移并賦值| |>>>=|右移零填充并賦值| |<<=|左移并賦值|

在Java中,所有整數類型都由寬度可變的二進制數字表示,除char類型外都是有符號整數,這意味著它們即可表示正數,也可以表示負數。

Java中使用“2的補碼”進行編碼,即負數的表示方法為:首先反轉數值中的所有位(1變為0,0變為1),然后再將結果加1。例如,-42的表示方法為:通過反轉42中的所有位(00101010),得到11010101,然后再加1,得到11010110,即-42。 為了解碼負數,首先反轉所有位,然后加1。例如,反轉-42(11010110),得到00101001,即41,再加一則得到42。

3.1 位邏輯運算符

位邏輯運算符包括&、|、^和~。

  • 運算規則如下表所示 |A|B|A|B|A&B|A^B|~A |:--:|:--:|:--:|:--:|:--:|:--:| |0|0|0|0|0|1| |1|0|1|0|1|0| |0|1|1|0|1|1| |1|1|1|1|0|0|

3.2 左移

左移運算符“<<”可以將數值中的所有位向左移動指定的次數,格式為:

value << num
  • num指定了將value中的值向左移動的次數,對于高階位,每次左移都被移出并丟失,右邊的位用0補充。這意味著左移int類型操作數時,如果某些位一旦超出31位,那么這些位將丟失。如果操作數是long類型,那么超出位63的位會丟失。
  • 當左移byte和short型數據時,Java的自動類型提升會導致意外的結果。當對表達式進行求值時,byte和short型數值會被提升為int類型,且表達式的結果也是int型。
  • 這意味著對byte和short型數值進行左移操作的結果為int型,若移動的位數不超出位31,則移動的位不會丟失。此外,當將負的byte和short型數值提升為int型時,會進行符號擴展,因此高階位將使用1填充。
  • 例如,如果左移byte型數值,會先將該數值提升為int型,然后左移。這意味著如果想要的結果是移位后的byte型數值,就必須丟棄結果的前三個字節,可以通過將結果強制轉換為byte類型來完成位數截取。

舉個例子:

public static void main(String[] args) {
    public static void main(String[] args) {
        //0011 1100
        byte a = 60;
        // a首先被提升為int類型,即(0000 0000 0000 0000 0000 0000 0011 1100)
        // 左移兩位,結果為(0000 0000 0000 0000 0000 0000 1111 0000),即240
        int i = a << 2;
        // 先左移兩位,結果為(0000 0000 0000 0000 0000 0011 1100 0000)
        // 舍棄前三個字節,得到(1100 0000),即-64
        byte b = (byte) (i << 2);
        System.out.println("i等于:" + i);
        System.out.println("b等于:" + b);
    }
}

輸出結果是:

i等于:240
b等于:-64

因為每次左移都相當于將原始值乘2,所以可以將之作為乘法的搞笑替代方法。但是如果將二進制1移進高階位,結果將會變成負數。

3.3 右移

右移的規則與左移類似,實例代碼如下:

public static void main(String[] args) {
    //0011 1100
    byte a = 60;  
    // a首先被提升為int類型,即(0000 0000 0000 0000 0000 0000 0011 1100)
    // 右移兩位,結果為(0000 0000 0000 0000 0000 0000 0000 1111),即15
    int i = a >> 2;
    // 先右移兩位,結果為(0000 0000 0000 0000 0000 0000 0000 0011)
    // 舍棄前三個字節,得到(0000 0011),即3
    byte b = (byte) (i >> 2);
    System.out.println("i等于:" + i);
    System.out.println("b等于:" + b);
}

執行結果

i等于:15
b等于:3

每次右移一位,相當于將該值除以2,并舍棄所有余數。可以利用這一特性實現高效的除法操作。

  • 當進行右移操作時,右移后的頂部(最左邊)位使用右移前頂部為使用的值填充,這稱為符號擴展。當對負數進行右移操作時,該特性可以保留負數的符號。
    public static void main(String[] args) {
    byte a=(byte) 0b11111000;
    System.out.println("a等于:"+a);
    int b=a>>1;
    System.out.println("b等于:"+b);
    }

    執行結果

    a等于:-8
    b等于:-4

3.4 無符號右移

每次移位時,“>>”運算符自動使用原來的內容填充高階位,這個特性可以保持數值的正負性。但是,有時候對那些非數值的內容進行移位操作,并不關心高階位初始值是多少,只希望用0來填充高階位,這就是無符號右移。

  • 為了完成無符號右移,需要使用Java的無符號右移運算符“>>>”,該運算符總是將0移進高階位。
    public static void main(String[] args) {
    //二進制表示(11111111 11111111 11111111 11111111)
    int a=-1;
    System.out.println(a);
    //右移二十四位(00000000 00000000 00000000 11111111)
    a=a>>>24;
    //輸出結果是 255
    System.out.println(a); 
    }

4. 關系運算符

關系運算符用于判定一個操作數與另一個操作數之間的關系。 |運算符|結果| |:--:|:--:| |==|等于| |!=|不等于| |>|大于| |<|小于| |>=|大于等于| |<=|小于等于|

5. 邏輯運算符

關系運算符用于判定一個操作數與另一個操作數之間的關系。 |運算符|結果| |:--:|:--:| |&|邏輯與| |||邏輯或| |^|邏輯異或| ||||短路或| |&&|短路與| |!|邏輯一元非| |&=|邏輯與并賦值| ||=|邏輯或并賦值| |^=|邏輯異或并賦值| |==|等于| |!=|不等于| |?:|三元運算符|

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

纳雍县| 长子县| 威宁| 讷河市| 古田县| 鹤壁市| 夹江县| 天柱县| 黔西| 辽阳市| 永善县| 胶州市| 铜山县| 永福县| 南皮县| 都江堰市| 黑河市| 兴仁县| 和硕县| 车险| 仙游县| 丰都县| 新和县| 阜新| 维西| 吴川市| 毕节市| 邵阳市| 文成县| 宜丰县| 左云县| 乌兰察布市| 石景山区| 庆元县| 大厂| 集安市| 桂林市| 岳池县| 乾安县| 民丰县| 富阳市|