当前位置: 首页 > 面试题库 >

为什么i | = j | = k | =(j + = i)--(k +++ k)--(i = + j)== 11?

唐阳飇
2023-03-14
问题内容

我在一个开始从事的项目中遇到了这段代码。原始开发人员不再可用,我对此一无所知:

k = (j = (i = 0) + 2) + 1;
return i|= j|= k|= (j+= i) - - (k+++k) - - (i =+j);

产生值为11。这是如何运作的?

  • 什么是=+运算符?
  • 什么是+++运算符?
  • 什么是- -运算符?
  • 什么是|=运算符?

问题答案:

什么是=+运算符?

那是两个运算符,一个是赋值运算符,=一个是一元加号+,它什么都不做。

您是否输入错了并表示compund赋值运算符+=

什么是+++运算符?

还有两个运算符,一个为后递增,++一个为加法+(根据最大划分规则,选择了最长的有效令牌,如果选择了最短的有效令牌,它将成为一个加法和两个一元加法)。

什么是- -运算符?

再一次是两个运算符,一个减法,一个一元负数(负)。

什么是|=运算符?

一个复合赋值,boolean对左侧的值与右侧的值进行按位或[如果是值,则对它们进行逻辑或],并将其存储在左侧的变量中。

a |= b;

几乎等于

a = a | b;

但是左侧操作数仅计算一次,而后者可能需要显式转换,而前者则不需要。

k = (j = (i = 0) + 2) + 1;
return i|= j|= k|= (j+= i) - - (k+++k) - - (i =+j);

它的值为11。这是如何工作的?

第一行相当于

i = 0;
j = i+2;
k = j+1;

赋值(i = 0例如)计算为存储的值(在i此)。

下一行是,具有适当的间距,并添加了隐式括号

return i |= (j |= (k |= (((j += i) - (-(k++ + k))) - (-(i = +j)))));
  • i |= stuff_1i被评估(0),stuff_1被评估,按位或被取,结果存储在中i。由于i本来是0,所以等效于i = stuff_1

  • j |= stuff_2j对(2)stuff_2求值,按位或求值,并将结果存储在中j

  • k |= stuff_3k被评估(3),然后stuff_3从左到右。

    • (j += i)添加ij,将和存储在中j并返回j的新值。由于i为0,因此j不会更改,值为2。
    • (k++ + k)接受k(3)的旧值,增加k并加上k新的值(4),得到7。该值被取反,并且从2中减去该取反的值(-7),得到2 - (-7) = 9
    • (i = +j)j(2)的值存储在中,i并且表达式的值也为2。该值被取反(-2)并从先前操作中得到的9中减去,因此stuff_3求值为11,其副作用是

    • i现在的存储值为2

    • 的存储值j现在为2(实际上没有更改,因为i最初为0)
    • k现在的存储值为4
    • k(3)的旧值按11进行位或运算,得到11,该值存储在中k,而11是的值stuff_2,即k |= stuff_3
    • j(2)的旧值按位或与stuff_2(11)的值相加,结果为11。该值存储在中jstuff_1j |= stuff_2)的值为11。
  • i(0)的旧值按位或与stuff_1(11)i的值相加,结果在中排序,然后值为i |= stuff_111。然后返回该值。



 类似资料:
  • 问题内容: 在声明数组时,我们可以在标识符的任何一侧使用方括号,但在以下情况下: 和 将以两种不同的方式来考虑它。那是第一个创建两个数组k和i。第二个创建一个数组k和一个普通变量i。这是什么行为? 编辑: 在Java中,通常我们更喜欢第一类声明。但是在这种情况下,我们无法在单个语句中创建数组和原始变量。 问题答案: 我的 猜测 如下: 该声明更具逻辑性,因为它声明为的 数组。因此,它是Java中的

  • 给我一个大小为n的正整数数组。对于数组中的每个索引I,我想找到最大的索引j,使得从索引I到j的数组元素之和小于或等于某个整数K。我只能用蛮力O(n^2)的方式来思考。我想知道是否有更有效的方法?

  • 我有一个s的矩阵,名为,当我按列而不是按行迭代它时,它的运行速度会慢50毫秒: 有人知道为什么会这样吗?我问过几个人,但他们都不知道为什么。我肯定这与地址在计算机内存中的表现方式有关,但我还是想找到一个更具体的答案。

  • 我在这里读这篇社论:https://www.geeksforgeeks.org/given-an-array-arr-find-the-maximum-j-i-such-that-arrj-arri/我无法理解O(n)解是如何工作的。描述它的段落似乎与准则相矛盾。我已经查看了一个示例阵列,手动确保这似乎是可行的,但对我来说,这似乎一点都不直观。 如果有人在解决编程难题方面更有经验,他会愿意解释这是

  • 问题内容: 在Scrapy docs中,有以下示例说明如何在Scrapy中使用经过身份验证的会话: 我已经做好了,很好。但是 我的问题是 :正如他们在最后一行的评论中所说,您需要做什么? 问题答案: 在上面的代码中,用于进行身份验证的将该函数设置为其回调。这意味着该函数将被调用并传递登录尝试得到的页面作为响应。 然后,通过在页面中搜索特定的字符串(在本例中为)来检查您是否成功登录。如果找到它,蜘蛛