a+b 怎么可能不等于 b+a?
How can a+b be NOT equal to b+a?
我们的教授说,在计算机逻辑中,将一个数字与另一个数字相加很重要,因此 a+b 和 b+a 并不总是相等。
虽然,我找不到一个例子说明它们什么时候会不同以及为什么它们不相等。
我认为它必须对位做一些事情,但话又说回来,我不确定。
虽然您没有分享很多背景信息,但听起来好像您的教授没有详细说明,或者您漏掉了什么。
在他谈论一般逻辑的情况下,他的意思可能是 +
运算符的行为取决于您如何定义它。
示例:定义 (+) a b := if (a==0) then 5 else 0
导致 +
运算符不具有关联性,例如1 + 0 将是 0,但 0 + 1 将是 5。有许多编程语言允许重新定义(覆盖)标准运算符。
但是根据您分享的上下文,这都是推测。
一个模糊的可能性是 a 或 b 中的一个是否是高清计时器值 - 自程序启动以来的滴答声。
由于在添加之前弹出其中一个值消耗了 cpu 个周期,总和可能会因顺序而异。
另一种可能性是 a
和 b
是具有副作用的表达式。例如
int x = 0;
int a() {
x += 1;
return x;
}
int b() {
return x;
}
a() + b()
将 return 2 并且 b() + a()
将 return 1(均来自初始状态)。
或者 a
或 b
可能是 NaN
,在这种情况下甚至 a == a
也是错误的。虽然这个与 "when you add a number to another".
无关
我们的教授说,在计算机逻辑中,将一个数字与另一个数字相加很重要,因此 a+b 和 b+a 并不总是相等。 虽然,我找不到一个例子说明它们什么时候会不同以及为什么它们不相等。 我认为它必须对位做一些事情,但话又说回来,我不确定。
虽然您没有分享很多背景信息,但听起来好像您的教授没有详细说明,或者您漏掉了什么。
在他谈论一般逻辑的情况下,他的意思可能是 +
运算符的行为取决于您如何定义它。
示例:定义 (+) a b := if (a==0) then 5 else 0
导致 +
运算符不具有关联性,例如1 + 0 将是 0,但 0 + 1 将是 5。有许多编程语言允许重新定义(覆盖)标准运算符。
但是根据您分享的上下文,这都是推测。
一个模糊的可能性是 a 或 b 中的一个是否是高清计时器值 - 自程序启动以来的滴答声。
由于在添加之前弹出其中一个值消耗了 cpu 个周期,总和可能会因顺序而异。
另一种可能性是 a
和 b
是具有副作用的表达式。例如
int x = 0;
int a() {
x += 1;
return x;
}
int b() {
return x;
}
a() + b()
将 return 2 并且 b() + a()
将 return 1(均来自初始状态)。
或者 a
或 b
可能是 NaN
,在这种情况下甚至 a == a
也是错误的。虽然这个与 "when you add a number to another".