“0”在Java中做什么?

我正在尝试查找数字中所有数字的乘积,我将其存储为字符串(由于int和长度限制)。

所以数字看起来像这样:

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

如果我使用此代码,它的工作原理:

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

如果我删除’0’则不会。

我从另一个在线资源获得此代码。 有人可以解释’0’的作用吗?

Ascii字符实际上是数字。 0 .. 9位数是从小数48开始的数字(0x30hex)。

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

因此,要获得任何字符数字的值,您可以删除’0’,即48。

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

如果你不删除’0’(48),总和将超过48 * numberOfDigits

请参阅ascii表以查找其中的数字。

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

我们来看看ASCII图表 在此处输入图像描述

你可以看到Dec值’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是数字字符

字符和整数几乎是一回事,因为每个字符都有一个代码(ASCII,但在某些情况下也是Unicode)。

通过从字符串中的任何数字减去'0' ,您将获得该整数的实际值。

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

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

‘0’是零值的char值。

当您编写一个字符串时,您正在编写一个’char’数据类型数组,编译器将其转换为ASCII值(具有相应的十进制数值)。

你打电话时

 number.charAt(i + j); 

您实际上是在生成ASCII值。

http://www.asciitable.com/

ASCII值’0’是:

48

‘1’:

49

。 。 。

‘9’:

57

所以当你打电话

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

您实际上正在运行ASCII值减去48的操作,这是它作为整数的实际值。

例如

(’9′ – ‘0’)=(57 – 48)=(9 – 0)= 9

number.charAt(i + j)删除0将以数字(或integer )的forms给出相同的字符。

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

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

现在,如果number.charAt(i + j)'1'则表达式'1'将替换为49,而'0'将替换为48,结果将给出1integer )。

字符存储为数字。 例如,’0’等于ASCII中的48。 因此,如果要将字符转换为整数,则必须删除“0”(或删除48将以相同的方式工作):

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

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