2015-12-22 501 views
3

我试图找到一个数字中的所有数字的产品,我将它们存储为一个字符串(由于int和长度的限制)。Java中'0'做什么?

所以数量看起来是这样的:

final String number = "1234567898765432123......etc" 

如果我用这个代码,它的工作原理:

product *= number.charAt(i + j) - '0'; 

它不会,如果我去掉 '0'。

我从另一个在线资源获取了此代码。有人可以解释'0'是什么吗?

+0

这些ascii字符可以被转换为整数。这些都是ascii表上的索引,所以请检查并获得第二个想法,我想你会得到它;) – Stefan

回答

8

Ascii字符实际上是数字。 0 .. 9数字是从十进制48开始的数字(0x30十六进制)。

'0' is 48 
'1' is 49 
... 
'9' is 57 

因此,要获得任何字符数字的值,你可以去掉“0”,即48

'1' - '0' => 1 
49 - 48 => 1 

如果不删除“0”(48)总总和将会超过48 * numberOfDigits

查看ascii table来查找数字。

请注意,'0'是字符0,而不是字符串"0"包含字符'0'

1

字符和整数实际上是相同的东西,因为每个字符都有一个代码(ASCII,但在某些情况下也是Unicode)。

通过从字符串中的任意数字中减去'0',即可得到该整数的实际值。

'0' > 48 
48 - 48 = 0 (integer value) 

这同样适用于所有其他整数。您可以使用其他字符做类似的事情,例如letter - 'A',根据字母在其中的位置为每个字母分配一个数字。

5

让我们来看看ASCII表enter image description here

你可以看到的“0”十二月价值 - >“9”

的的charAt()方法只是获取字符,则自动转换为int值时计算。

'0' -> 48 
'1' -> 49 
... 
'9' -> 57 

减去 '0' 后:

'0' - '0' -> 48 - 48 = 0 
'1' - '0' -> 49 - 48 = 1 
... 
'9' - '0' -> 57 - 48 = 9 

毕竟,'N' - '0'= N其中n是一个数字字符

0

字符存储为数字。例如,在ASCII中'0'等于48。所以,如果你想要一个字符转换为整数,你必须删除“0”(或删除48人的工作方式相同):

product *= number.charAt(i + j) - 48; 

的更多信息:http://www.asciitable.com

1

“0”是char值为零。

当你编写一个字符串时,你正在编写一个'char'数据类型的数组,它被编译器转换成ASCII值(它具有相应的十进制数值)。

当你调用

number.charAt(i + j); 

你实际上是产生ASCII值。

http://www.asciitable.com/

'0' 的ASCII值是:

'1':

。 。 。

'9':

所以,当你调用

number.charAt(i + j) - '0'; 

你实际上运行的ASCII值的操作零下48是它的实际价值为整数。

例如

( '9' - '0')=(57 - 48)=(9 - 0)= 9

1

卸下从number.charAt(i + j)0会给你在数字(或integer)的形式相同的字符。

当您在任何表达式中使用字符时,该字符将被其ASCII值替换。为'0'(字符0)

ASCII值是48 为'1'(字符0)ASCII值是49

现在,如果number.charAt(i + j)'1'然后在表达'1'由49和'0'代替由48取代这会给你1integer)。