gpt4 book ai didi

java - 小写字母到大写的 java 示例 Shildt

转载 作者:行者123 更新时间:2023-12-02 12:09:41 25 4
gpt4 key购买 nike

char ch;

for (int i = 0; i < 10; i++) {
ch = (char) ('a' + i);
System.out.print(ch); //<- output small letter
ch = (char) ((int) ch & 65503); //<-- ???
System.out.print(ch + " ");
}

请解释一下代码部分ch = (char) ((int) ch & 65503);

为什么我们需要 65503?

最佳答案

Java 使用 UTF-16 字符。这些字符占用 2 个字节。数字 65503 的位模式为

1111 1111 1101 1111
^ // only the 6th bit is 0

正如你所看到的,只有第 6 位是 0。当你使用这个数字作为 bit-mask 时并执行按位 AND 运算(您的 char & 65503),它会关闭该 char 的第 6 位(使其为零)。

如果你看ASCII table (ASCII 和 Unicode 对于拉丁字母来说是相同的)您会看到第 6 位是大写拉丁字母和非大写拉丁字母之间的差异(值的差异恰好是 32)。因此,如果您有小拉丁字符,它们将变成大写字符。如果你有大写字符,它将什么也不做,因为它们的第 6 位已经是 0。所以基本上这是对拉丁字符执行 toUpperCase() 的黑客攻击。

关于java - 小写字母到大写的 java 示例 Shildt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46629277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com