做外貿(mào)怎樣免費登錄外國網(wǎng)站網(wǎng)頁設計首頁制作
提綱1:常見的位運算使用場景
提綱2:整數(shù)類型運算時的類型溢出問題,產(chǎn)生原因以及解決辦法
提綱3:浮點類型運算時的精度丟失問題,產(chǎn)生原因以及解決辦法
數(shù)值類型(6種)分為:
整型(整數(shù)):byte 字節(jié)型,占1個字節(jié)? short 短整型,占2個字節(jié)? int 整型, 占4個字節(jié)(默認)
long 長整型,占8個字節(jié)
浮點型(小數(shù)):float 單精度浮點數(shù),占4個字節(jié)? double 雙精度浮點數(shù),占8個字節(jié)(默認)
運算方式:
1.算術(shù)運算符:+? -? *? /? %
注意1:數(shù)值類型使用算術(shù)運算符,運算結(jié)果任然為數(shù)值
注意2:整數(shù)之間使用“\”,進行整除運算
注意3:整數(shù)不能為“零”
注意4:防止“類型溢出”
整數(shù)類型運算時的類型溢出問題,產(chǎn)生原因以及解決辦法
產(chǎn)生原因:
固定范圍:Java的整數(shù)類型有固定的范圍。例如,int類型的范圍是-2^31到2^31-1(包括負數(shù),因為Java使用二進制補碼表示法)。如果運算結(jié)果超出這個范圍,就會發(fā)生溢出。
算術(shù)運算:任何可能產(chǎn)生超出范圍結(jié)果的算術(shù)運算(加法、減法、乘法)都可能導致溢出。
類型轉(zhuǎn)換:將一個范圍較大的整數(shù)類型強制轉(zhuǎn)換為范圍較小的整數(shù)類型時,如果值超出目標類型的范圍,也會發(fā)生溢出。解決辦法:
整數(shù)類型運算時遇到的類型溢出問題,可以使用BigInteger來解決
浮點類型運算時的精度丟失問題,產(chǎn)生原因以及解決辦法
產(chǎn)生原因:
是因為計算機內(nèi)部是通過二進制形式來保存浮點數(shù)的,無法精確的表示十進制的小數(shù),所以會產(chǎn)生精度丟失的問題。具體情況如下:
十進制的小數(shù)在進行二進制轉(zhuǎn)換時,整數(shù)部分會除二取余,小數(shù)部分會乘二取整,在乘二取整的過程中,會產(chǎn)生無限循環(huán)的情況,所以就出現(xiàn)了精度丟失。解決辦法:
浮點類型運算時遇到的精度丟失問題,可以使用BigDecimal來解決
注意5:浮點數(shù)運算時,除數(shù)為零
System.out.println(-5.0/0); //結(jié)果為Infinity或-InfinitySystem.out.println(0.0/0); //結(jié)果為NaN
2.位運算:
1)<<? (左移)>> (右移)位移運算:左移變大,右移變小
int number=100;
System.out.println(number<<3);//向左移3位相當于n*2^3
System.out.println(number>>3);//向右移3位相當于n/2^3//在原有基礎上,計算1.5 倍的增長
int cap=16;
int newCap1=(int)(cap*1.5);//算術(shù)運算符
int newCap2=cap+(cap>>1);//位運算符
System.out.println(newCap1);
System.out.println(newCap2);
2)位運算:&運算
運算規(guī)則:同時為1 結(jié)果為1 否則為0
常見的位運算使用場景:
1.判斷奇偶數(shù):位運算可以用于判斷一個整數(shù)是奇數(shù)還是偶數(shù)。一個整數(shù)與1進行位與運算,如果結(jié)果為0,則該整數(shù)為偶數(shù);如果結(jié)果為1,則該整數(shù)為奇數(shù)
2.快速的計算:位運算可以用于實現(xiàn)一些簡單的乘法和除法運算。例如,乘以2可以通過左移一位來實現(xiàn),除以2可以通過右移一位來實現(xiàn)。
3.哈希值的計算:在哈希算法中,位運算也經(jīng)常被使用。例如,Java的HashMap在實現(xiàn)其hash方法時,就使用了右移運算符(>>>)。
4.交換變量值:位運算可以用于交換兩個變量的值。你可以使用異或(^)運算和位與(&)運算來實現(xiàn)這一點。
lass demo02 {public static void main(String[] args) {int a = 5;int b = 10;System.out.println("交換前:");System.out.println("a = " + a);System.out.println("b = " + b);// 使用異或運算交換a和b的值a = a ^ b;b = a ^ b;a = a ^ b;System.out.println("交換后:");System.out.println("a = " + a);System.out.println("b = " + b);}}運行結(jié)果: 交換前: a = 5 b = 10 交換后: a = 10 b = 5
5.整數(shù)絕對值:位運算也可以用于計算整數(shù)的絕對值。通過異或(^)運算和右移(>>)運算,我們可以得到一個整數(shù)的絕對值。
3.關(guān)系運算符:>? <? >=? <=? ==? !=
運算規(guī)則:數(shù)值類型之間運算,運算結(jié)果為boolean
4.邏輯運算符:&&(與)? || (或) !(非)
運算規(guī)則:布爾類型之間運算,結(jié)果為boolean
&&運算:同時為true 結(jié)果為true 否則為false
||運算:同時為false 結(jié)果為false 否則為true
!運算:false為true? true為false
5.三元運算符:條件表達式?表達式1:表達式2
int a=7 ,b=13 ,c=91;//3個變量排序//最大值int max=(a>b) ? (a>c ? a : c) :(b>c ? b : c);//最小值int min=(a<b) ? (a<c ? a : c) :(b<c ? b : c);//中間值int mid=(a+b+c)-max-min;System.out.println(max);System.out.println(mid);System.out.println(min);
?
?
?
?