Old answer。
專注於我的ASCII值的討論,即使我已經包括Unicode字符。
從Docs
char數據類型是單16位的Unicode字符。'\u0000'
和max:'\uffff'
其ASCII value分鐘:0和max:65535(含) - 分鐘
炭可以表示
請注意,0 == \u0000
和65,535 == \uffff
- 以及之間的一切。它們是相應的值。
在你的代碼中,這些字符用ASCII值表示以進行算術運算(整數從0到65,535)。
例如,炭'A'
可以通過其INT(ASCII)值65
表示:
System.out.print('A'); // prints A
System.out.print((int)('A')) // prints 65 because you casted it to an int
作爲一個說明,一個short
是一個16位簽署整數,所以即使char
也是16位,char
(65,535)的最大整數值超過short
(32,767)的最大整數值。因此,從char
轉換爲(short)
並不總是可行。並且char
的最小整數值是0,而short
的最小整數值是-32,768。
爲您的代碼,讓我們說,焦炭是'D'
return 10 + ch - 'A';
將返回10 + 68 - 65
所以它會返回13
對於所有意圖和目的,它 「轉換」 的char
數據類型爲整數值,然後進行基本算術運算。該'D'
炭可以通過68
的整數ASCII值來表示
比方說,焦炭是'H'
if (ch >= 'A' && ch <= 'F') would not be true because `'H'` > `'F'` (72 > 70)
所以它會
return ch - '0';
這將返回72 - 48
所以它會返回24
http://stackoverflow.com/a/20720381/2792531 – nhgrif
thx nhgrif,幫助我理解它 – thrax