首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >交换单个字母单词的大小写

交换单个字母单词的大小写
EN

Stack Overflow用户
提问于 2019-05-14 02:49:52
回答 3查看 63关注 0票数 4

我找到了这个用于交换大小写的代码,但我对它的工作原理有点困惑。

代码语言:javascript
复制
class Main {
  private static String swapCase(String s) {
      String r = "";
      for (char c : s.toCharArray())
          r += c ^= 32; // this line
      return r;
  }

  public static void main(String[] args) {
    System.out.println(swapCase("Hello"));
  }
}

我知道它会遍历每个字符。但是,我不能理解这行(特别是XOR运算符)。

代码语言:javascript
复制
r += c ^= 32; 

我的意思是32的意义是什么?它是如何调换箱子的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-14 03:01:10

这就是ASCII的设置方式。

来自a-z的Letter的第6位设置为1;而来自A-Z的Letter的第6位设置为0

代码语言:javascript
复制
32 = 100000 // the 6-th bit is set to 1

int进行异或运算将使第6位反转。

你可以做一点调试,看看你自己:

代码语言:javascript
复制
for (char c : s.toCharArray()) {
        System.out.println(Integer.toBinaryString((int) c));
        c ^= 32; // this line
        System.out.println(Integer.toBinaryString((int) c));
}
票数 4
EN

Stack Overflow用户

发布于 2019-05-14 03:03:55

对于ASCII编码,32是小写字母和大写字母之间的差。它是2的幂,它的二进制表示是一个1比特:0010 0000

通过应用XOR赋值运算符,可以更改字符值中的这一位。有效地加(如果在c中位为0)或减法(位在c中为1) 32。

这对字母A-Z和a-z很有效,但很可能对输入中的大多数其他字符没有意义。

票数 1
EN

Stack Overflow用户

发布于 2019-05-14 03:06:52

让我们看看这张表,你就会明白为什么

代码语言:javascript
复制
a = 01100001    A = 01000001 
b = 01100010    B = 01000010 
c = 01100011    C = 01000011 
d = 01100100    D = 01000100 
e = 01100101    E = 01000101 
f = 01100110    F = 01000110 
g = 01100111    G = 01000111 
h = 01101000    H = 01001000 
i = 01101001    I = 01001001 
j = 01101010    J = 01001010 
k = 01101011    K = 01001011 
l = 01101100    L = 01001100 
m = 01101101    M = 01001101 
n = 01101110    N = 01001110 
o = 01101111    O = 01001111 
p = 01110000    P = 01010000 
q = 01110001    Q = 01010001 
r = 01110010    R = 01010010 
s = 01110011    S = 01010011 
t = 01110100    T = 01010100 
u = 01110101    U = 01010101 
v = 01110110    V = 01010110 
w = 01110111    W = 01010111 
x = 01111000    X = 01011000 
y = 01111001    Y = 01011001 
z = 01111010    Z = 01011010 

与上版本和下版本的唯一区别是第5位(从0开始计数)。这就是为什么使用一个简单的XOR掩码,您可以来回更改大小写。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56118273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档