我不明白这个char方法是如何工作的

时间:2014-06-14 15:01:25

标签: java char

这种方法究竟有用吗?这是一种改变角色的方法。我不明白你如何使用'a'从c中减去。它全部保存为数字吗?在这种情况下%= 26会做什么?

private char shift(char c)
{
    int letter = c-'a';
    letter+= shift;
    letter %=26;
    return (char) ('a'+ letter);
 }

4 个答案:

答案 0 :(得分:0)

char是Java中的两字节无符号整数。 'c'是一种更易读的方式(在处理字符时)99,因为字符'c'的Unicode值是99。

因此,如果您的c变量是字符'c',则其值为99. 'a'的值为97,'c' - 'a'等于2.

答案 1 :(得分:0)

char在技术上是一种数字类型 - 它使用字符的Unicode代码点作为其数据值。从' c'中减去'a'会给出' c'在字母表中。 %=26将字母设置为除以26时出现的余数。基本上,此方法使用凯撒密码将每个字母移位shift个位置。

答案 2 :(得分:0)

使用c-'a'时,表示从符号“c”中减去符号“a”的ASCII码编号。 http://www.asciitable.com/ 你可以看到每个符号都有自己的ascii数字。从例子        ASCII的“c”= 99        ASCII的“a”= 97 所以c-a = 2。

答案 3 :(得分:0)

C和Java中的字符可以作为非常短的数字处理。但它被视为一个字符,它编码一个ASCII字符。

letter %=26;

只是

的简短表达
letter = letter % 26;

%是模运算,并通过参数除法返回提醒。

您的代码执行以下操作

private char shift(char c) {
    int letter = c-'a';          // calculate distance to 'a'
    letter+= shift;              // add some distance
    letter %=26;                 // handle overflow - if shifted behind 'z'
    return (char) ('a'+ letter); // apply calculated distance to 'a' to get output
                                 // and cast it to type char.
}

似乎是Cesar chiffre的实现。