以下哪项陈述相同?
(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)是相同的
答案 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)
-=
运算符扩展为x = x - (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(×tamp_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(×tamp_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
,*=
和/=