我一直在互联网上寻找凯撒密码,虽然我理解循环,但我不明白为什么这一行代码能够将一个字符转移到另一个字符?我不明白这句话:
letter = (char)(letter - 26);当我取出(char)时,它不起作用,而且我从未见过它的类型在括号中,后面跟着一个操作。
希望这是一个简单的问题,谢谢你的帮助。
for (int i = 0; i < buffer.Length; i++)
{
// Letter.
char letter = buffer[i];
// Add shift to all.
letter = (char)(letter + shift);
// Subtract 26 on overflow.
// Add 26 on underflow.
if (letter > 'z')
{
//The following line is the line I don't understand. Why char in parentheses then another parentheses?
letter = (char)(letter - 26);
}
else if (letter < 'a')
{
letter = (char)(letter + 26);
}
// Store.
buffer[i] = letter;
}发布于 2014-12-04 21:13:59
(char)是一个演员。这意味着它接受一种类型的值,并将其转换为另一种类型的值。因此,如果x是int,则(double)x生成与整数值相同的值的double。
这个表达式中之所以需要(char),是因为int对int或long类型的值做了所有的整数运算。因此,即使letter是char,在表达式letter + 26中,letter将自动转换为int,然后将26添加到整数中。(char)将其转换为char类型(从0到65535是一个整数值)。Java不会自动将较大的整数类型(int,其值从-2147483648到2147483647)转换为较短的整数类型(char),因此必须使用强制转换。
但是,Java确实允许这样做:
letter += 26;它具有相同的效果,而且不需要施放。
发布于 2014-12-04 21:11:03
英文字母表中有26个字母,字符是一个完整的类型。
char ch = 'Z' - 25;
System.out.println(ch); // <-- AJLS-4.2.1 -积分类型和值说(部分),
对于
char,从‘\\0000’到'\uffff‘包括在内,即从0到65535
https://stackoverflow.com/questions/27304064
复制相似问题