“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值。
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,结果将给出1
( integer
)。
字符存储为数字。 例如,’0’等于ASCII中的48。 因此,如果要将字符转换为整数,则必须删除“0”(或删除48将以相同的方式工作):
product *= number.charAt(i + j) - 48;
更多信息: http : //www.asciitable.com