---
# System prepended metadata

title: JAVA 運算子與運算元
tags: [Java]

---

# JAVA 運算子與運算元


###### tags: `Java` 

---

![](https://i.imgur.com/j0AOglQ.png)



### & (AND)
是一個二位元的運算符號，因此運算時應該要同時拿2個運
算元的資料來作運算。

### &&(Short-circuit AND)
也是一個二位元的運算符號。因為AND的特
性只要1個運算元為False，整個式子就為假，因此&&(Short-circuit AND)
的運算就是，假如第一個運算元的資料已經為False了，它就不會再判別第
二個運算元資料，直接輸出False。

您可能覺得奇怪, &、| 這一組運算子和 &&、||這一組運算子的作用好像一模一樣, 為什麼要有兩組功用相同的運算子呢？ 
####  其實這兩組運算子進行的運算雖然相同, 但是 &&、|| 這一組運算子會在左邊的運算元就可以決定運算結果的情況下忽略右邊運算元。


## JAVA 移位運算
可參考:
[java移位運算符：<<（左移）、>>（帶符號右移）和>>>（無符號右移）。](http://blog.sina.com.cn/s/blog_99201d890101hd6s.html)


---

### 左移運算符
value << num
* 按二進制形式把所有的數字向左移動對應的位數，高位移出(捨棄)，低位的空位補零。
* 按二進制形式把所有的數字向左移動對應的位數，高位移出(捨棄)，低位的空位補零。
* 當左移的運算數是byte 和short類型時，將自動把這些類型擴大為int 型。
* 在數字沒有溢出的前提下，對於正數和負數，左移一位都相當於乘以2的1次方，左移n位就相當於乘以2的n次方


---

### 右移運算符
* 即正數補零，負數補1
* 當右移的運算數是byte 和short類型時，將自動把這些類型擴大為int 型。
* 例如，如果要移走的值為負數，每一次右移都在左邊補1，如果要移走的值為正數，每一次右移都在左邊補0，這叫做符號位擴展（保留符號位）（sign extension ），在進行右移操作時用來保持負數的符號。
* 右移一位相當於除2，右移n位相當於除以2的n次方。







---

### 無符號右移
* 它的通用格式如下所示：
    * value >>> num
    * num 指定要移位值value 移動的位數。

* 無符號右移的規則只記住一點：忽略了符號位擴展，0補最高位
* 無符號右移運算符>>> 只對32位和64位的值有意義




---
<style>
h2 {
    color: #2383B8;
}
h3 {
    color: #1AA340;
}
h4 {
    color: white;
    background-color: #2383B8;
    padding:8px;
}

.code1 {
    padding: 2px 4px;
    font-size: 90%;
    color: #c7254e;
    background-color: #f9f2f4;
    border-radius: 4px;
    font-family:'Fira Code';
}
.code {
    padding: 2px 4px;
    font-size: 90%;
    font-family:'Fira Code';
}
</style>