1,看下面程序輸出什么?
public class InTheLoop {
????public static final int END = Integer.MAX_VALUE;
????public static final int START = END - 100;
????public static void main(String[] args) {
????????int count = 0;
????????for (int i = START; i <= END; i++)
????????????count++;
????????System.out.println(count);
????}
}
解答:死循環(huán)(infinite loop)。原因是一個int,是不可能大于Integer.MAX_VALUE的,當(dāng)?shù)竭_Integer.MAX_VALUE之后繼續(xù)加1,就會默認(rèn)的變?yōu)镮nteger.MIN_VALUE,所以形成了無限循環(huán)。這就提醒我們在處理integral type(包括byte, char, short ,int 和 long)的時候,要小心取值范圍。
2、JVM中整數(shù)的“/”和“%”運算:
a/b=+(a絕對值/b絕對值)取地板? (ab同號、b!=0)
?????=-(a絕對值/b絕對值)取地板? (ab異號、b!=0)
eg:7/-3=-1,25/4=6
a%b=+(a絕對值%b絕對值)?????? (a>=0、b!=0)
?????? =-(a絕對值%b絕對值)?????? (a<=0、b!=0)
eg:15%-4=3,-15%-4=-3
3、用移位運算效率較高:
public static boolean isOdd(int i){//判斷是否為奇數(shù)
??? return(i & 1) == 1;
}
4、當(dāng)賦值運算符出現(xiàn)在if或輸出語句上時:首先進行賦值,其次把等號右邊的結(jié)果作為整個表達式的結(jié)果。
例1:
boolean b=true;
if(b = false){
???System.out.println(b);
???System.out.println("haha");
}
輸出:
false
haha
--------------
例二:
boolean b=true;
?System.out.println(b=false);
System.out.println(b);
輸出為:
false
false
5、當(dāng)計算大數(shù)字的時候,要小心overflow,variable的類型只能決定最后的存儲類型,不能決定中間計算時的臨時存儲類型。比如
long i = 10000000000000000000000000000 / 1000000000000;
6、位擴展
a)位擴展(widen primitive conversion)時,正數(shù)高位補0,負(fù)數(shù)高位補1。
b)計算前,正數(shù)和零存為原碼,負(fù)數(shù)存為補碼(去反加一)
eg:Long.toHexString(0x100000000L + 0xcafebabe)打印為多少?0xcafebabe變?yōu)長ong型為0xffffffffcafebabe 加 0x100000000L = 0x100000000cafebabe,最高位1overflow,結(jié)果為0xcafebabe。
c)char型占16位,是0——65535,不含負(fù)數(shù),故char位擴展時高位全補0
eg:(int)(char)0xff輸出為65535。
posted on 2006-06-26 17:41
保爾任 閱讀(186)
評論(0) 編輯 收藏