/*
各位大侠,程序中我写了注释的部分,是我一直理解不了的部分,希望高手指点
不明白的地方: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. 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+" ");
}
}
}
32十六进:20H, 二进0010 0000
'z' = 123
123十六进:7BH'a' --- 'z' 中,从右数第六位为1
那么减32和关掉这个位是同样的效果,这是在特定的范围内才有效
(char)('a'&(~32)) = 'A'---初学者
大伙看看我解释的对不对?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+" ");
}
}
}如果都没有意见,那么这个分数就归我自己了。^_^,因为没有一个可以提供让我比较信服的答案的。
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