/*
各位大侠,程序中我写了注释的部分,是我一直理解不了的部分,希望高手指点
不明白的地方:1. 65503的第六位为0,它与任何其他数字的第六位进行位与运算,结果肯定是0,也就是把第六位关闭,但是为什么关闭第六位就表示减少32呢?
2. 如果一个字符,用二进制表示第六位也是0,那么如果它与65503进行位与运算,第六位并没有变化,那么又怎么会减少32呢?
3. 可是程序运行的时候确实把所有的小写字母都转换成了大写字母,这是什么原因?各位高手,不吝赐教,先谢了 
*/public class UpCase { public static void main(String[] args) {
char ch;

for(int i=0;i<10;i++){
ch=(char)('a'+i);
System.out.print(ch);
ch=(char)((int)ch&65503);
//65503在2进制中为1111 1111 1101 1111
//位与运算将使第六位关闭,即减少32
System.out.print(ch+" ");
}
}
}

解决方案 »

  1.   

    小写字母的ASCII码是比其大写字母的大32呀!!!
      

  2.   

    小写字母的ASCII的第六位是“1”
      

  3.   

    'a' - 'A' = 32
    32十六进:20H, 二进0010 0000
    'z' = 123
    123十六进:7BH'a' --- 'z' 中,从右数第六位为1
    那么减32和关掉这个位是同样的效果,这是在特定的范围内才有效
    (char)('a'&(~32)) = 'A'---初学者
      

  4.   

    唉,最终还得自己解决,各位也可以参考,咱继续交流
    大伙看看我解释的对不对?public class UpCase { public static void main(String[] args) {
    char ch;

    for(int i=0;i<10;i++){
    ch=(char)('a'+i);
    System.out.print(ch);
    ch=(char)((int)ch&65503);
    //65503在2进制中为1111 1111 1101 1111
    //将使第六位关闭,即减少32
    /*
     * a的unicode编码为97
     * b 98
     * c 99
     * ……
     * z 122
     * 
     * 65503在2进制中最后八位为 1101 1111
     * a                       0110 0001
     * b                       0110 0010
     * c                       0110 0011
     * ……
     * z                       0111 1010
     */
    //即所有的小写字母换算成2进制后第六位都是1,所以才用以上方法
    //等于都减去了32
    System.out.print(ch+" ");
    }

    System.out.println("\n");
    for(int i=0;i<10;i++){
    ch=(char)('A'+i);
    System.out.print(ch);
    ch=(char)((int)ch|32);
    //32在2进制中为100000
    //将使第六位打开,即增加32
    /*
     * A的unicode编码为65  
     * B 66
     * C 67
     * ……
     * Z 90
     * 
     * 32的2进制表示:10 0000
     *  A           100 0001
     *  B           100 0010
     *  C           100 0011
     * ……
     *  Z           101 1010
     */
    //即所有的大写字母换算成2进制后第六位都是0,所以才用以上方法
    //等于都加上了32
    System.out.print(ch+" ");
    }
    }
    }如果都没有意见,那么这个分数就归我自己了。^_^,因为没有一个可以提供让我比较信服的答案的。
      

  5.   

    你把二进制都打印出来看一下不就完了。 System.out.println("A-Z     a-z     65503");
    for(int j=0;j<26;j++){
    System.out.println(Integer.toBinaryString('A'+j)+","+Integer.toBinaryString('a'+j)+","+Integer.toBinaryString(65503));
    }A-Z     a-z     65503
    1000001,1100001,1111111111011111
    1000010,1100010,1111111111011111
    1000011,1100011,1111111111011111
    1000100,1100100,1111111111011111
    1000101,1100101,1111111111011111
    1000110,1100110,1111111111011111
    1000111,1100111,1111111111011111
    1001000,1101000,1111111111011111
    1001001,1101001,1111111111011111
    1001010,1101010,1111111111011111
    1001011,1101011,1111111111011111
    1001100,1101100,1111111111011111
    1001101,1101101,1111111111011111
    1001110,1101110,1111111111011111
    1001111,1101111,1111111111011111
    1010000,1110000,1111111111011111
    1010001,1110001,1111111111011111
    1010010,1110010,1111111111011111
    1010011,1110011,1111111111011111
    1010100,1110100,1111111111011111
    1010101,1110101,1111111111011111
    1010110,1110110,1111111111011111
    1010111,1110111,1111111111011111
    1011000,1111000,1111111111011111
    1011001,1111001,1111111111011111
    1011010,1111010,1111111111011111