问题标签 [integer-arithmetic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 减去两个无符号 32 位整数并分配给 64 位有符号整数
目标是得到 (-1) 作为最终结果。
对于上面的程序(每行都有编号),有人可以解释一下吗
- 为什么(2)按预期工作,而不是(3)?ALU 的算术或微步是什么?
- (4) 和 (5) 有什么区别
- 为什么(7)有效而(6)失败
c++ - 奇怪的整数溢出逻辑
对于以下代码,我得到了溢出,但遗憾的是我似乎无法理解为什么。
之后test
是一个相当大的值。
有人可以解释一下,这里会发生什么吗?
integer-arithmetic - 并行添加两个整数
假设您在两个数组 a,b 中给出了 2 个 n 位数的无符号整数,并且您有 p 个处理器,每个处理器可以添加 2 个数字并计算进位(如果存在)。是否可以在 O(p+n/p) 时间内计算 a+b?我一直在尝试将输入分成 (n/p) 的 p 个间隔,但我不知道如何处理进位。
c# - 在 C# 整数算术中,a/b/c 是否总是等于 a/(b*c)?
令 a、b 和 c 为非大正整数。a/b/c 是否总是等于 a/(b * c) 与 C# 整数算术?对我来说,在 C# 中它看起来像:
所以我的问题是:是否x1 == x2
适用于所有 a、b 和 c?
java - 为什么这个算术运算在java中不起作用?
在执行以下操作时,我很想看到一个奇怪的错误:
输出是这样的:
为什么最后三个操作返回0
?周围的括号1/3
似乎改变了它执行计算的方式,但甚至试图将其转换为int
也不会改变输出。
我正在使用BlueJ IDE
和Java version 1.7.0_17
编辑
我找到了答案。这是由于操作顺序。parens
除法首先发生的原因是int
1/3 或 2/3 总是等于0
。如果我允许width * 2
在除以3
一切之前发生就可以了,因为数字大于1
。
有时它只是基本的数学...... :)
c++ - Find out (in C++) if binary number is prefix of another
I need a function with a header like this:
If a is, read as a binary number string, a prefix of b, then set *c to be the rest of b (i.e. "what b has more than a") and return true. Otherwise, return false. Assume that binary strings always start with "1".
Of course - it is easy to do by comparing bit by bit (leftshift b until b==a). But is there a solution which is more efficient, without iterating over the bits?
Example: a
=100 (4), b
=1001 (9). Now set *c
to 1.
integer-arithmetic - 防止因两个人的恭维而导致的不当行为
我阅读了以下问题:Value of i for (i == -i && i != 0) to return true in Java并且有点眼花缭乱。
有人读到航天器因使用错误的单位系统而丢失,所以看到问题和 awnser 中提到的行为对我来说是非常意外的。
如何防止由此产生的错误/意外行为而不会造成运行时损失?(我发现通过比较很难想到有意义的代码=
,而我认为abs
返回负值失败相当简单)。有例外要捕获吗?警告这一点的短绒?
意外行为:
如果输入是最小负数, javaabs()
返回最小负数。-x=x 有一个非 0 的解,即二进制补码中的最小负数。
casting - 键盘类型转换
我想将从我的 Arduino 键盘(类型为“char”)输入的数字转换为类型“int”,以便我可以在变量中使用它们并使用数学。例如,如果我按下键“5”,我如何将它放入变量“keyPressed”并执行“X =(keyPressed * 3)”以获得“int X = 15”。我厌倦了 atol、atoi、reinterpret_cast、static_cast 等,但没有成功。我正在使用“开关盒”从我的键盘获取条目,但任何其他方法都可以。我拥有按下一个键并获得类似 Serial.println() 等输出所需的一切,但没有我可以在进一步计算中使用的 int 值。请帮忙。谢谢你。
这段代码终于可以工作了!:感谢您的所有帮助。
我现在正在为“lcd ....”更改“Serial ....”,它适用于我的液晶显示器。这是基本代码,当然我必须对其进行微调。-cl
algorithm - 以低复杂度方式求幂
我想计算 q^k,st q 是 n 位宽,在限制中:
- 最终结果将是 n*k 位宽。
- 对于计算的每一步,x,y st x 相乘的结果是|x| 位宽,y 为 |y| 位宽是 |x|*|y| 位宽。
我试着成对做这件事;从 q^2 开始,然后是 q^4,等等。第一步的结果需要 2n 位,第二步需要 (2^2)n 位等,最后一步需要 n*2^(logk) (=kn ) 位。我们有 log(k) 步,仔细计算得出:O(log(n)(log(k))^2)。在上述限制中,我很高兴听到更快的方法(或对该算法或类似算法的更好分析)。提前致谢。
haskell - 无限精度整数:除以 2
在 C 语言中,如果我想将一个 int 除以 2,x%2
应该运行得尽可能快,(x%10)% 2
因为一个好的编译器只会查看最后一位。但是在具有无限精度算术的语言中呢?
特别是,在 Haskell 中哪个会更快(或者它们会是相同的速度):even x
还是even (quot x 10)
?