请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl

please explain this statement(cout << 1 + int((a < b) ^ ((b - a) & 1)) << endl)

本文关键字:lt b-a amp endl 1+int 这句话 解释 cout      更新时间:2023-10-16
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int a, b;
cin >> a >> b;
if (a == b) cout << 0 << endl;
else cout << 1 + int((a < b) ^ ((b - a) & 1)) << endl;
}
return 0;
}

请有人描述一下上面的陈述。这个陈述是如何运作的,这个陈述的结果是什么。这段代码是codeforces中的一段代码。链接:https://codeforces.com/blog/entry/74224

让我们循序渐进。

  1. c = (b - a) & 1-检查是否设置了b - a的最后一位,与检查b - a是否为奇数相同
  2. d = (a < b) ^ c-如果int(a < b) != c,则返回true
  3. 1 + int(d)-应清楚

然后我们有

(b - a) - odd          (b - a) - even
(a < b)           1                       2
(a >= b)          2                       1