# 運算符
位運算符效率很高,但是可讀性不好。因為它是基于二進制的[**補碼**]()直接運算的。
## 1、左移:<<
**運算規則**:<< 幾位,就乘以 2 的 幾次方;二進制補碼左移 n 位,右邊補 0
Demo:
> ?System.out.println(4 << 3); //等價于4乘以2的3次方,4\*8=32
>
> 4的二進制:0000 0100
> 4<<3: 0010 0000 (向左移動3位,左邊補0)
## 2、右移:>>
**運算規則**:>> 幾位,就除以 2 的幾次方;二進制補碼右移 n 位,左邊補0還是1,看最高位
Demo:
> ?System.out.println(32 >>4); //等價于32除以2的4次方,32/16 =2
>
> 32的二進制:0010 0000
> 32>>4 : 0000 0010 (向右移動4位,右邊補位看最高位)
>
> System.out.println(-32 >>4);? //等價于-32除以2的4次方,-32/16 =-2
>
> \-32的二進制:
> 原碼:1010 0000
> 反碼:1101 1111
> 補碼:1110 0000
> ? -32>>4: 1111 1110 (向右移動4位,右邊補最高位)
> 補碼:1111 1110
> 反碼:1111 1101
> 原碼:1000 0010 = -2
## 3、無符號右移:>>>
**運算規則**:二進制補碼右移n位,左邊補0;對于負數來說,移完后,變為正數
Demo:
> System.out.println(32 >>> 4);? ?//和>>一樣,左邊補0
>
> 32的二進制:0010 0000
> 32>>4:? ? ? ? 0000 0010
>
> System.out.println(-32 >>> 4);??
>
> -32的二進制:
> 原碼:1000 0000 0000 0000 0000 0000 0010 0000
> 反碼:1111? 1111? 1111? 1111 1111? 1111? 1101 1111
> 補碼:1111? 1111? 1111? 1111 1111? 1111? 1110 0000
>
> -32>>>4: 0000 1111 1111 1111 1111 1111 1111 1110?
> 最高位是0,是正數
| 類別 | 操作符 | 關聯性 |
| --- | --- | --- |
| 后綴 | () \[\] . (點操作符) | 左到右 |
| 一元 | expr++ expr-- | 從左到右 |
| 一元 | ++expr --expr + - ~ ! | 從右到左 |
| 乘性? | \* /% | 左到右 |
| 加性? | \+ - | 左到右 |
| 移位? | \>> >>> ?<<? | 左到右 |
| 關系? | \> >= < <=? | 左到右 |
| 相等? | \==? != | 左到右 |
| 按位與 | & | 左到右 |
| 按位異或 | ^ | 左到右 |
| 按位或 |  | 左到右 |
| 邏輯與 | && | 左到右 |
| 邏輯或 | | | 左到右 |
| 條件 | ?: | 從右到左 |
| 賦值 | \= + = - = \* = / =%= >> = << =&= ^ = | = | 從右到左 |
| 逗號 | , | 左到右 |
- Java自動化測試
- 第一章:Java:基礎內容
- 1.1:Java:Hello Word
- 1.2:Java:熱身
- 1.3:Java:注釋
- 1.4:Java:標識符
- 1.5:Java:常量
- 1.6:Java:基本數據類型
- 1.7:Java:引用類型
- 1.8:Java:String類
- 第二章:Java:運算符
- 2.1:Java:算數運算符
- 2.2:Java:關系運算符
- 2.3:Java:邏輯運算
- 2.4:Java:賦值運算符
- 2.5;Java:三元運算符
- 2.6:Java:位運算符
- 第三章:Java:循環控制語句
- 3.1:Java:for循環
- 3.2:Java:while循環
- 3.3:Java:switch
- 3.4:Java:if else
- 3.5:Java:練習題
- 第四章:Java:函數與全局/局部變量
- 4.1:Java:局部變量
- 4.2:Java:全局變量
- 第五章:Java:方法
- 5.1:Java:初識方法
- 5.2:Java:方法調用
- 5.3:Java:方法重載
- 5.4:Java:構造方法
- 5.5:Java:方法的注意事項
- 第六章:Java:面向對象
- 6.1:Java:小案例
- 6.2:Java:this 關鍵字
- 6.3:Java:super 關鍵字
- 6.4:Java:static 關鍵字
- 6.5:Java:final關鍵字
- 6.6:Java:instanceof 運算符
- 6.7:Java:面向對象之封裝
- 6.8:Java:面向對象之繼承
- 6.9:Java:面向對象之多態
- 第七章:Java:面向對象高級進階
- 7.1:Java:抽象類
- 7.2:Java:Java中String類
- 7.3:Java:interface接口
- 7.4:Java:ArrayList
- 7.5:Java:HashSet
- 7.6:Java:HashMap
- 7.7:Java:反射(reflection)
- 第八章:Java:日志以及異常捕獲
- 8.1:Java:log4j
- 8.2:Java:異常初識基礎
- 8.3:Java:未被捕獲的異常
- 8.4:Java:try和catch的使用
- 8.5:Java:多重catch語句的使用
- 8.6:Java:throws/throw 關鍵字
- 8.7:Java:finally關鍵字
- 8.8:Java:自定義異常
- 第九章:Java:xml and IO
- 9.1:Java:IO基本概念
- 9.2:java:properties
- 9.3:Java:xml基本介紹
- 9.4:Java:xml操作實例
- 第十章:Java:JDBC編程
- 10.1:Java:JDBC介紹
- 10.2:Java:JDBC查詢
- 10.3:Java:JDBC插入
- 10.4:Java:Batch
- 10.5:Java:JDBC連接池
- 第十一章:Java:TestNG
- 11.1:java:TestNG簡介
- 11.2:Java:TestNG小實例
- 11.3:Java:TestNG.xml文件配置
- 11.4:Java:TestNG基本注解
- 11.5:Java:TestNG注解代碼
- 11.6:Java:TestNG預期異常
- 11.7:Java:TestNG忽略測試
- 11.8:Java:TestNG超時測試
- 11.9:Java:TestNG分組測試