運算符和表達式
ˉ
基本概念
運算符
:用于標記對數據執行某種運算的特定符號 。
操作數
:參加運算的數據稱為運算對象(操作數)。
分類
按運算符的功能,將運算符分為:算術運算符、關系運算符、邏輯運算符、位運算符等
按參與運算的操作數的個數,將運算符分為:單目運算符、雙目運算符、三目運算符
表達式
:若干操作數(operand)和運算符(operator)按照約定規則構成的一個序列 。
ˉ
算術運算符
加運算符+:連接兩個字符串。例如,“abc”+12的結果為“abc12”;”abc”+1+2=
?
“abc”+(1+2)=
?
Java語言既可對整數取模,也可以對小數取模。例如,16.2%5=1.2
char類型的數據可以進行算術運算,而boolean類型的數據
不能
進行算術運算。
++(--)運算符的操作數必須是變量,不能是常量或表達式 。++i 或者 i++
(注意兩者的區別)
ˉ
關系運算符
關系運算符用于判斷兩個操作數的等價性和大小關系,得到的結果為
布爾類型
,取值為true或false。常用于邏輯判斷(if語句或循環)。
例3.2 關系運算符的使用。
ˉ
邏輯運算符
邏輯運算符可以對boolean類型數據進行邏輯上的“與”、“或”、“非”、“異或”等運算,結果仍為boolean類型,通常用于程序的流程控制。邏輯運算符 &(&&)、|(||)、!
注意:運算符(&、|)和運算符(&&、||)的
區別
。
ˉ
位運算符
位運算符用來對整型(byte、short、int、long)或字符型(char)數據二進制位進行操作,結果為一個整數。
~(按位取反)
格式: ~a
功能:將操作數a中的二進制位由1變0,由0變1。
例如:int x=2; ~x=?
格式: ~a
功能:將操作數a中的二進制位由1變0,由0變1。
例如:int x=2; ~x=?
&(按位相與)
格式:a & b
功能:兩個操作數的相應位都為1,則該位為1,否則為0。 例如, int x=2,y=7; x & y = ?
格式:a & b
功能:兩個操作數的相應位都為1,則該位為1,否則為0。 例如, int x=2,y=7; x & y = ?
|(按位相或)
格式:a | b
功能:兩個操作數的相應位中有一個為1,則該位的結果為1。例如,int x=5,y=8; x | y = ?
格式:a | b
功能:兩個操作數的相應位中有一個為1,則該位的結果為1。例如,int x=5,y=8; x | y = ?
^(按位相異或)
格式:a ^ b
功能:兩個操作數的相應位相異,則該位的結果為1,否則為0。例如,int x=5,y=8; x ^ y = ?
格式:a ^ b
功能:兩個操作數的相應位相異,則該位的結果為1,否則為0。例如,int x=5,y=8; x ^ y = ?
>>(按位右移)
格式:a >> b
功能:將a右移b位,右端的低位被舍棄,左端高位補原來的符號位 。例如,byte x=-6;x >>2 = ?
格式:a >> b
功能:將a右移b位,右端的低位被舍棄,左端高位補原來的符號位 。例如,byte x=-6;x >>2 = ?
<<(按位左移)
格式:a << b
功能:將a左移b位,右端的低位補0,左端的高位被舍棄。例如,byte x=-6;x << 2 = ?
格式:a << b
功能:將a左移b位,右端的低位補0,左端的高位被舍棄。例如,byte x=-6;x << 2 = ?
>>>(無符號右移)
格式:a >>> b
功能:將a右移b位,右端的低位被舍棄,左端的高位補0。例如,byte x=-6;x >>> 2 = ?
格式:a >>> b
功能:將a右移b位,右端的低位被舍棄,左端的高位補0。例如,byte x=-6;x >>> 2 = ?
注意:移位運算時真正的移位位數不一定是指定的b位。當a為int型(或byte、short、char型)時,系統會先將b對32取模,得到的結果才是真正移位的位數,而當a為long型時,系統先將b對64取模,得到的結果作為真正的移位位數。
例3.5 位運算的綜合應用。
分析:方法getOneBit()可以返回參數num的第n-1位。
public int getOneBit(int num,int n){
int i=1 << (n-1);
int nb = num & i;
return nb >> (n-1);
}
ˉ
賦值運算符
格式:變量=表達式
double d = 7.8f; //合法
int a = 78L; //非法
int a = (int)78L; //合法
double d = 7.8f; //合法
int a = 78L; //非法
int a = (int)78L; //合法
復合的賦值運算符
+= -= *= /= %= &= |= ^= >>= <<= >>>=
+= -= *= /= %= &= |= ^= >>= <<= >>>=
ˉ
條件運算符
格式:表達式1 ? 表達式2 :表達式3
需注意: 表達式1應是boolean類型的表達式;表達式2和表達式3的類型要一致。
需注意: 表達式1應是boolean類型的表達式;表達式2和表達式3的類型要一致。
ü
彈出輸入對話框,接收用戶輸入: JOptionPane.showInputDialog(s)
ü
將數字的字符串表示形式轉換為整數:Integer.parseInt(s)
ü
result = (score>=60) ? "及格" : "不及格"
System.out.println(result);
ˉ
表達式
表達式(expression)是由若干操作數(operand)和運算符(operator)按照約定規則構成的一個序列。
運算符標明對操作數進行何種操作;
操作數可以是變量、常量或有返回值的方法調用等其他的表達式。
(a-b)/c+4
5>=a
a>3 && a<10
10*max(a,b)
a=10
100
ˉ
表達式中的數據類型轉換
自動類型轉換
當不同類型的常量和變量在表達式中混合使用時,它們最終將被轉換為同一類型,然后進行運算。為了保證精度,轉換從表示數的范圍較小的數據類型到表示數的范圍較大的數據類型。
強制類型轉換
格式:(目標數據類型)變量或表達式
例如,(float)5 / 9 * (f - 32)
例如,(float)5 / 9 * (f - 32)
注意:強制類型轉換時,由于目標數據類型的取值范圍小于待轉換數據類型的取值范圍,在轉換過程中會出現截斷,導致高位數據丟失或精度下降。
例3.8將32位整數65366強制轉換為byte型后,整數的高位被截掉,只剩下低8位,字節數據為86,導致數據丟失。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
