Tag: 整数算术

Java基元的范围计算

在Java中,当我们声明 short number=1024*1024*1024; 它会给编译时间错误,但 short number=1024 * 1024 * 1024 * 1024; 编译好。 为什么会这样呢?

在C#整数运算中,a / b / c总是等于a /(b * c)?

令a,b和c为非大正整数。 用C#整数运算,a / b / c总是等于a /(b * c)吗? 对我来说,在C#中看起来像: int a = 5126, b = 76, c = 14; int x1 = a / b / c; int x2 = a / (b * c); 所以我的问题是:所有的a,b和c的x1 == x2 ?

确定一个数字是十的倍数还是在一组特定的范围内

我在我的程序中需要一些循环。 我可以写出伪代码,但我不完全知道如何写他们的逻辑。 我需要 – if (num is a multiple of 10) { do this } if (num is within 11-20, 31-40, 51-60, 71-80, 91-100) { do this } else { do this } //this part is for 1-10, 21-30, 41-50, 61-70, 81-90 这是一个蛇和梯子的棋盘游戏,如果它使我的问题更有意义。 我想象第一个if语句需要使用模数, if (num == 100%10)是正确的? 第二个我不知道。 我可以把它写出来, if (num > 10 && […]

在解释型语言中使用非常大的整数时会出现意外的结果

我试图得到1 + 2 + … + 1000000000的总和,但是我在PHP和Node.js中得到了有趣的结果。 PHP $sum = 0; for($i = 0; $i <= 1000000000 ; $i++) { $sum += $i; } printf("%s", number_format($sum, 0, "", "")); // 500000000067108992 Node.js的 var sum = 0; for (i = 0; i <= 1000000000; i++) { sum += i ; } console.log(sum); // 500000000067109000 正确的答案可以使用计算 1 […]

为什么ushort + ushort等于int?

在此之前,我正在试图增加两个ushorts,而且我注意到我必须把结果回传给ushort。 我以为它可能会成为一个uint(防止可能的意外溢出?),但令我惊讶的是它是一个int(System.Int32)。 有没有一些聪明的理由,或者这可能是因为int被视为“基本”整数types? 例: ushort a = 1; ushort b = 2; ushort c = a + b; // <- "Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)" uint d = a + b; // <- "Cannot implicitly convert type 'int' to 'uint'. An explicit conversion exists […]

是无符号整数减法定义的行为?

我遇到过一些人的代码,他们似乎认为在结果为负数时,从另一个相同types的整数中减去一个无符号整数是有问题的。 所以这样的代码即使发生在大多数架构上也不正确。 unsigned int To, Tf; To = getcounter(); while (1) { Tf = getcounter(); if ((Tf-To) >= TIME_LIMIT) { break; } } 这是我能find的C标准中唯一相关的引用。 涉及无符号操作数的计算永远不会溢出,因为无法用结果无符号整数types表示的结果被减less的模数大于可由结果types表示的最大值的数。 我想可以把这个引号的意思是,当右操作数较大时,操作被调整为在模截断数的上下文中是有意义的。 即 0x0000 – 0x0001 == 0x 1 0000 – 0x0001 == 0xFFFF 而不是使用实现相关的签名语义: 0x0000 – 0x0001 ==(无符号)(0 + -1)==(0xFFFF也是0xFFFE或0x8001) 哪个或哪个解释是正确的? 它是否定义?