java中大小写字目相互转换

img


各位码友 求第四行代码的详细解释,题目内容为:
字符型变量ch中存放着一个大小写未知的英文字母,判断其大小写后,将ch的值转为小写或大写字母(不允许使用加减运算符和if语句)。

大写字母范围在65-90,它们的32这个位(也就是从右向左数,第5位)是0。而ch&32就是判断这一位数字是否为0,如果为0,显然字符是大写字符。而大写字符转为小写字符就是加32,因此ch | 32就是对字符加32。反之是小写字符,转为大写字符需要减去32,用位与操作就是将32的反码与ch进行位与即可

这是三元运算符的使用,其相当于:

if (ch&32 == 0) {
  ch = (char)(ch|32);
} else {
  ch = (char)(ch&(Integer.MAX_VALUE-32));
}

建议使用ascll码