我正在通过Daniel liang在第9章“字符串”中的“ Java编程第9版简介”来学习Java,我遇到了这段代码:
public static int hexCharToDecimal(char ch){
if (ch >= 'A' && ch <= 'F')
return 10 + ch - 'A';
else
return ch - '0';
}
好吧,有人可以解释一下这里发生了什么吗?如何从整数中添加子字符,其背后的含义是什么,谢谢。
来自文档
char数据类型是单个16位Unicode字符。
A char
由其代码点值表示:
'\u0000'
(或0)'\uffff'
或65,535)您可以在ASCII表上看到所有英文字母代码点。
请注意,0 == \u0000
和65,535 == \uffff
,以及之间的所有内容。它们是对应的值。
char
实际上,A 仅存储为数字(其代码点值)。我们有语法来表示像char c = 'A';
这样的字符,但它等效于char c = 65;
并且'A' == 65
为true。
因此,在您的代码中,字符用其十进制值表示以进行算术运算(整数从0到65,535)。
例如,char 'A'
由其代码点65
(ASCII表中的十进制值)表示:
System.out.print('A'); // prints A
System.out.print((int)('A')); // prints 65 because you casted it to an int
请注意,a short
是一个16位有 符号 整数,因此即使a
char
也是16位,a的最大整数值char
(65,535)仍超过a的最大整数值short
(32,767)。因此,(short)
从a强制转换为char
不能始终有效。并且a的最小整数值为char
0,而a的最小整数值为short
-32,768。
对于您的代码,假设char
是was 'D'
。请注意,'D' == 68
由于其代码点是68
。
return 10 + ch - 'A';
这将返回10 + 68 - 65
,因此它将返回13
。
现在,假设字符是'Q' == 81
。
if (ch >= 'A' && ch <= 'F')
由于'Q' > 'F'
(81 > 70
),这是错误的,因此它将进入代码else
块并执行:
return ch - '0';
这将返回,81 - 48
因此它将返回33
。
您的函数返回一个int
类型,但是如果要返回一个类型char
或将其int
强制转换为char
之后的类型,则33
返回的值将表示该'!'
字符,因为33
它是其代码点值。在ASCII表或Unicode表中查找字符以进行验证'!' == 33
(比较十进制值)。
targetPixValList是一个包含Double对象的列表,它也包含列表中连续位置的相似值,当我尝试使用Code_1比较两个Double值时,cnt返回零。当我使用code_2时,cnt返回值。 列表的类型是 为什么“==”运算符不能与Double一起使用? 代码_1: Code_2:
问题内容: 如果使用一元/ 运算符作为转换函数来执行转换,那么为什么我们需要一元运算符?这些一元运算符有什么特殊需要? 问题答案: 一元运算符将其操作数转换为数字类型。一元运算符将其操作数转换为数字类型,然后取反。(根据ECMAScript规范) 实际上,一元仅用于将负数放在正则表达式中,例如: 那是工作中的一元负运算符。正如规范所暗示的,一元等效于作为函数调用的Number()构造函数。 我只能
问题内容: 这段代码有什么问题: 问题答案: 三元运算符不能有不返回值或方法的语句。您需要具有返回值的语句。 您需要重写它。
问题内容: 我最近遇到了以下代码: 这是什么,某种反向双λ? 问题答案: 没有操作员。第一个只是Java 8中引入的lambda语法,第二个是误导性的“小于” 和“一元减”的串联。 您可以将其读取为,即它会测试是否小于,所有(很好,大多数)负数就是这种情况,因此命名为。 仅出于完整性考虑:此测试不仅(有意地?)难以理解,而且-如评论中所指出- 也因(而)失败。相反,您可能应该只使用简单得多的。
问题内容: 我已经使用Java几年了,但是直到最近我还没有遇到过这种构造: 这可能是一个非常简单的问题,但是有人可以解释吗?我该如何阅读?我很确定我知道它是如何工作的。 如果isHere为真,getHereCount()则称为 如果isHere为假,getAwayCount()则调用。 正确?这个结构叫做什么? 问题答案: 是的,它是 它称为条件运算符。许多人(错误地)将其称为三元运算符,因为它是
问题内容: public int add(int a, int b){ while (b != 0){ int carry = (a & b) ; 这是使用按位运算来计算两个整数之和的代码。 如果我手动/编程计算,我会看到它适用于每个整数。但是我无法弄清楚和之间的中间值之间的任何关系。为什么将进位乘以2分配给? PS:我在Java中找到了一个按位乘法和 加法的答案,但这是乘法而不是加法。 问题答案