posts - 73,  comments - 55,  trackbacks - 0

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);

    }

}
解答:死循环(infinite loop)。原因是一个int,是不可能大于Integer.MAX_VALUE的,当到达Integer.MAX_VALUE之后继续加1,就会默认的变为Integer.MIN_VALUE,所以形成了无限循环。这就提醒我们在处理integral type(包括byte, char, short ,int 和 long)的时候,要小心取值范围。

2、JVM中整数的“/”和“%”运算:
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){//判断是否为奇数
    return(i & 1) == 1;
}

4、当赋值运算符出现在if或输出语句上时:首先进行赋值,其次把等号右边的结果作为整个表达式的结果。
例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、当计算大数字的时候,要小心overflow,variable的类型只能决定最后的存储类型,不能决定中间计算时的临时存储类型。比如
long i = 10000000000000000000000000000 / 1000000000000;

6、位扩展
a)位扩展(widen primitive conversion)时,正数高位补0,负数高位补1。
b)计算前,正数和零存为原码,负数存为补码(去反加一)
eg:Long.toHexString(0x100000000L + 0xcafebabe)打印为多少?0xcafebabe变为Long型为0xffffffffcafebabe 加 0x100000000L = 0x100000000cafebabe,最高位1overflow,结果为0xcafebabe。
c)char型占16位,是0——65535,不含负数,故char位扩展时高位全补0
eg:(int)(char)0xff输出为65535。

posted on 2006-06-26 17:41 保尔任 阅读(183) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(4)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜