有人可以解释为什么答案是B?我正在使用Java,我不明白

时间:2015-05-09 18:27:22

标签: java math

以下哪项陈述相同?

(I)x - = x + 4

(II)x = x + 4 - x

(III)x = x - (x + 4)

一个。 (I)和(II)是相同的

B中。 (I)和(III)是相同的

℃。 (II)和(III)是相同的

d。 (I),(II)和(III)是相同的

4 个答案:

答案 0 :(得分:6)

x -= y is equivalent to x = x - y

因此

x -= x + 4

相当于

x = x - (x+4)

假设(II) x = x - (x + 4)应该是(III) x = x - (x + 4)(因为您有两个标记为(II)的选项),(I)(III)是相同的。< / p>

答案 1 :(得分:3)

这是因为运营商的优先权。 Java评估它就好像它是

x - =(x + 4)

所以它首先计算(x+4)然后从x中减去 - - -=部分的含义 - 然后更新x },这是=部分的含义。

答案 2 :(得分:1)

  • 案例(I)根据Java -=运算符扩展为x = x - (x + 4),
    并在数学上简化为x = -4。
  • 案例(II)在数学上简化为x = 4.
  • 案例(III)在数学上简化为x = -4。

因此(I)和(III)是相同的,这意味着答案是(B)。

答案 3 :(得分:0)

static void reset_timer(const struct idletimer_tg_info *info, struct sk_buff *skb) { unsigned long now = jiffies; struct idletimer_tg *timer = info->timer; bool timer_prev; spin_lock_bh(&timestamp_lock); timer_prev = timer->active; timer->active = true; /* timer_prev is used to guard overflow problem in time_before*/ if (!timer_prev || time_before(timer->timer.expires, now)) { pr_debug("Starting Checkentry timer (Expired, Jiffies): %lu, %lu\n", timer->timer.expires, now); /* Stores the uid resposible for waking up the radio */ if (skb && (skb->sk)) { struct sock *sk = skb->sk; read_lock_bh(&sk->sk_callback_lock); if ((sk->sk_socket) && (sk->sk_socket->file) && (sk->sk_socket->file->f_cred)) timer->uid = sk->sk_socket->file->f_cred->uid; read_unlock_bh(&sk->sk_callback_lock); } /* checks if there is a pending inactive notification*/ if (timer->work_pending) timer->delayed_timer_trigger = timer->last_modified_timer; else { timer->work_pending = true; schedule_work(&timer->work); } } get_monotonic_boottime(&timer->last_modified_timer); mod_timer(&timer->timer, msecs_to_jiffies(info->timeout * 1000) + now); spin_unlock_bh(&timestamp_lock); } 是一种所谓的复合赋值。

这些只是捷径并结合原子操作。

-=代表x -= y

x = x-y代表x += y

x = x+y代表x++

x = x+1代表x--

还有++ x和--x与x ++ / x--相同,只是它们在增加/减少之前返回x 的值。

官方Java教程:

  

“你也可以将算术运算符与简单运算符结合起来   赋值运算符以创建复合赋值。例如,x + = 1;   并且x = x + 1;都将x的值增加1。“

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html

我认为同样适用于x = x-1*=/=