以下代码块将输出设置为0。
public class HelloWorld{
html" target="_blank">public static void main(String []args){
int product = 1;
for (int i = 10; i <= 99; i++) {
product *= i;
}
System.out.println(product);
}
}
请有人可以解释为什么会这样吗?
程序在每个步骤执行的操作如下:
1 * 10 = 10
10 * 11 = 110
110 * 12 = 1320
1320 * 13 = 17160
17160 * 14 = 240240
240240 * 15 = 3603600
3603600 * 16 = 57657600
57657600 * 17 = 980179200
980179200 * 18 = 463356416
463356416 * 19 = 213837312
213837312 * 20 = -18221056
-18221056 * 21 = -382642176
-382642176 * 22 = 171806720
171806720 * 23 = -343412736
-343412736 * 24 = 348028928
348028928 * 25 = 110788608
110788608 * 26 = -1414463488
-1414463488 * 27 = 464191488
464191488 * 28 = 112459776
112459776 * 29 = -1033633792
-1033633792 * 30 = -944242688
-944242688 * 31 = 793247744
793247744 * 32 = -385875968
-385875968 * 33 = 150994944
150994944 * 34 = 838860800
838860800 * 35 = -704643072
-704643072 * 36 = 402653184
402653184 * 37 = 2013265920
2013265920 * 38 = -805306368
-805306368 * 39 = -1342177280
-1342177280 * 40 = -2147483648
-2147483648 * 41 = -2147483648
-2147483648 * 42 = 0
0 * 43 = 0
0 * 44 = 0
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
0 * 97 = 0
0 * 98 = 0
请注意,在某些步骤上,相乘会导致较小的数字(980179200 * 18 = 463356416)或错误的符号(213837312 * 20 =
-18221056),表明存在整数溢出。但是零从何而来呢?继续阅读。
牢记int
数据类型是签署了32位,补整,这里是每一个步骤的说明:
Operation Result(1) Binary Representation(2) Result(3)
---------------- ------------ ----------------------------------------------------------------- ------------
1 * 10 10 1010 10
10 * 11 110 1101110 110
110 * 12 1320 10100101000 1320
1320 * 13 17160 100001100001000 17160
17160 * 14 240240 111010101001110000 240240
240240 * 15 3603600 1101101111110010010000 3603600
3603600 * 16 57657600 11011011111100100100000000 57657600
57657600 * 17 980179200 111010011011000101100100000000 980179200
980179200 * 18 17643225600 100 00011011100111100100001000000000 463356416
463356416 * 19 8803771904 10 00001100101111101110011000000000 213837312
213837312 * 20 4276746240 11111110111010011111100000000000 -18221056
-18221056 * 21 -382642176 11111111111111111111111111111111 11101001001100010101100000000000 -382642176
-382642176 * 22 -8418127872 11111111111111111111111111111110 00001010001111011001000000000000 171806720
171806720 * 23 3951554560 11101011100001111111000000000000 -343412736
-343412736 * 24 -8241905664 11111111111111111111111111111110 00010100101111101000000000000000 348028928
348028928 * 25 8700723200 10 00000110100110101000000000000000 110788608
110788608 * 26 2880503808 10101011101100010000000000000000 -1414463488
-1414463488 * 27 -38190514176 11111111111111111111111111110111 00011011101010110000000000000000 464191488
464191488 * 28 12997361664 11 00000110101101000000000000000000 112459776
112459776 * 29 3261333504 11000010011001000000000000000000 -1033633792
-1033633792 * 30 -31009013760 11111111111111111111111111111000 11000111101110000000000000000000 -944242688
-944242688 * 31 -29271523328 11111111111111111111111111111001 00101111010010000000000000000000 793247744
793247744 * 32 25383927808 101 11101001000000000000000000000000 -385875968
-385875968 * 33 -12733906944 11111111111111111111111111111101 00001001000000000000000000000000 150994944
150994944 * 34 5133828096 1 00110010000000000000000000000000 838860800
838860800 * 35 29360128000 110 11010110000000000000000000000000 -704643072
-704643072 * 36 -25367150592 11111111111111111111111111111010 00011000000000000000000000000000 402653184
402653184 * 37 14898167808 11 01111000000000000000000000000000 2013265920
2013265920 * 38 76504104960 10001 11010000000000000000000000000000 -805306368
-805306368 * 39 -31406948352 11111111111111111111111111111000 10110000000000000000000000000000 -1342177280
-1342177280 * 40 -53687091200 11111111111111111111111111110011 10000000000000000000000000000000 -2147483648
-2147483648 * 41 -88046829568 11111111111111111111111111101011 10000000000000000000000000000000 -2147483648
-2147483648 * 42 -90194313216 11111111111111111111111111101011 00000000000000000000000000000000 0
0 * 43 0 0 0
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
0 * 98 0 0 0
我们知道,将数字乘以偶数:
因此,基本上,您的程序会反复将偶数与另一个数相乘,从而从右开始将结果位清零。
PS:如果乘法仅涉及奇数,则结果将不会为零。
给定一个大小为n, n的数组
问题内容: 给出了长度为 n 的数组。查找子数组元素的乘积之和。 说明 数组 A* = 长度 3的 [2,3,4] 。 * 长度为 2的 子数组= [2,3],[3,4],[2,4] [2,3] 中元素的乘积= 6 [3,4] 中元素的乘积= 12 [2,4] 中元素的乘积= 8 长度 2 = 6 + 12 + 8 = 26的子数组的总和 同样,对于长度 3 ,Sum = 24 因此,乘积以模 1
问题内容: 根据Apache Commons Lang的文档,字符串‘१२३’是数字。 由于我认为这可能是文档中的错误,因此我进行了测试以验证该声明。我发现根据Apache Commons,它 是 数字。 为什么这个字符串是数字的?这些字符代表什么? 问题答案: 因为该“ CharSequence仅包含Unicode数字”(引用链接的文档)。 所有字符对于以下字符均返回true : 某些包含数字的
问题内容: 我目前正在编写一个小的下载管理器,尝试以百分比计算下载进度时会得到一个有趣的输出。这是我用来计算的: 是一个int(它计算从中读取的总字节数),并且是下载文件的长度(以字节为单位)。 只需少量下载即可很好地工作。但是,当我使用较大的文件(40MB)时,它开始制作有趣的东西。计算的输出如下所示: 我不知道为什么,但是计算结果为负。 由于正常的整数应该可以包含2 31 -1的数字,因此这不
给出了一个长度为n的数组。求子数组元素的乘积之和。 解释 长度为3的数组A=[2,3,4]。 因为,对于以模1000000007计算的较长的子数组,乘积可以更大。 对于所有可能长度的子数组,即1,2,3,....,n,求这些和的有效方法是什么,其中n是数组的长度。
Java中的本质上是不可靠的。具体地说,我对接口的最大问题是,它需要一个不定义方法本身的方法行为。因此,如果遍历一个列表,您必须使用反射来访问它定义的行为。然而,在Java8中,我们现在有了默认方法,现在我问为什么在中没有默认的方法。 我理解为什么接口不能默认对象方法,但是,这是一个明确的设计决定,所以可以做出例外。 我有点想弃用并将其内部代码更改为类似以下内容: 然后继续使用使作为中的默认方法的