标签: compound-assignment

字符串+ = s1和字符串=字符串+ s1之间的区别

我的程序之一超出了我使用的时间限制fans = fans + s[i],而当我正在使用fans += s[i]它的时候却被接受了……为什么会发生这种情况?为了进一步说明,迷是一个字符串,而s也是一个字符串,因此在遍历字符串si时只需要s的一些字符,因此我创建了一个新的字符串迷。现在有两种方法可以在新字符串中添加字符粉丝 问题在下面提到

fans = fans + s[i]; // gives Time limit exceeded 
fans += s[i];       // runs successfully
Run Code Online (Sandbox Code Playgroud)

c++ performance stdstring compound-assignment

28
推荐指数
3
解决办法
3397
查看次数

Java boolean | =运算符

最近我看到一个代码使用这个:

boolean val = something();
val |= somethingElse();
Run Code Online (Sandbox Code Playgroud)

有趣的部分是| =(二进制)运算符在布尔基元类型上制作.

令我感到惊讶的是,布尔值存在| =存在,好像它是整数类型,并搜索此运算符的Java规范,但找不到任何.

如果左值已经为真,我会好奇是否评估右操作数.

有人能指出我的Java规范吗?

java specifications operators boolean-expression compound-assignment

26
推荐指数
1
解决办法
1万
查看次数

复合let/const赋值是什么意思?

在Bluebird图书馆的wiki中有一篇文章优化杀手.在本文中有一个短语:

目前不可优化:
...
包含复合的
函数let赋值包含复合const赋值的函数

复合赋值和复合const赋值是什么意思?在ECMAScript 5.1中有复合赋值的概念,但在ECMAScript 2015中,似乎没有任何复合赋值的概念,只有常规赋值.

我怀疑复合let和const赋值,它只是声明后的复合赋值.例如:

let n = 1;
n += 4;
Run Code Online (Sandbox Code Playgroud)

我对吗?

javascript compound-assignment bluebird

24
推荐指数
1
解决办法
3328
查看次数

为什么"a ^ = b ^ = a ^ = b;" 与"a ^ = b; b ^ = a; a ^ = b;"不同?

我尝试使用XOR在不使用第三个变量的情况下在Java中交换两个整数的代码.

以下是我尝试的两个交换函数:

package lang.numeric;

public class SwapVarsDemo {

    public static void main(String[] args) {
        int a = 2984;
        int b = 87593;
        swapDemo1(a,b);
        swapDemo2(a,b);
    }

    private static void swapDemo1(int a, int b) {
        a^=b^=a^=b;
        System.out.println("After swap: "+a+","+b);
    }

    private static void swapDemo2(int a, int b) {
        a^=b;
        b^=a;
        a^=b;
        System.out.println("After swap: "+a+","+b);
    }

}
Run Code Online (Sandbox Code Playgroud)

此代码生成的输出如下:

After swap: 0,2984
After swap: 87593,2984
Run Code Online (Sandbox Code Playgroud)

我很想知道,为什么这句话:

        a^=b^=a^=b;
Run Code Online (Sandbox Code Playgroud)

与此不同?

        a^=b;
        b^=a;
        a^=b;
Run Code Online (Sandbox Code Playgroud)

java expression-evaluation compound-assignment

20
推荐指数
3
解决办法
5684
查看次数

*p ++ + = 2定义得很好吗?

我不确定下面的陈述是否由标准C明确定义

*p1++ += 2;
Run Code Online (Sandbox Code Playgroud)

或其他类似声明:

*E1++ <operator>= E2
Run Code Online (Sandbox Code Playgroud)

从标准C关于后增量:

postfix ++运算符的结果是操作数的值.获得结果后,操作数的值递增.(即,将相应类型的值1添加到其中.)有关约束,类型和转换以及操作对指针的影响的信息,请参阅加法运算符和复合赋值的讨论.更新操作数的存储值的副作用应发生在前一个和下一个序列点之间.

关于coumpund-assignment:

E1 op = E2形式的复合赋值与简单赋值表达式E1 = E1 op(E2)的不同之处仅在于左值E1仅被评估一次.

c c++ pointers post-increment compound-assignment

16
推荐指数
1
解决办法
1215
查看次数

i + = ++我在C++ 0x中的未定义行为吗?

我非常确信我已经发现,就C++ 0x而言,这i = ++i 并不是未定义的,但我无法判断是否有i += ++i明确定义的行为 .任何接受者?

c++ undefined-behavior compound-assignment c++11

14
推荐指数
1
解决办法
730
查看次数

为什么Java中的复合赋值没有捕获溢出问题?

令我震惊的是,以下代码将在没有警告的情况下编译:

public void test()
{
    int value = 2000000000;
    long increment = 1000000000;
    value += increment;
}
Run Code Online (Sandbox Code Playgroud)

虽然这会产生编译时错误,正如您所期望的那样:

public void test()
{
    int value = 2000000000;
    long increment = 1000000000;
    value = value + increment;
}
Run Code Online (Sandbox Code Playgroud)

我检查了一下,事实上,JLS(第15.26.2节)有这样的说法:

形式E1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次.

这对我来说似乎很荒谬.为什么他们觉得有必要在这里明确投射?似乎自动类型转换无论如何都会处理扩展,并且像这样自动缩小几乎可以保证导致整数溢出.

java integer-overflow compound-assignment

13
推荐指数
1
解决办法
602
查看次数

表达式中有序列点a ^ = b ^ = a ^ = b,还是未定义?

据称"巧妙"(但实际上效率低下)交换两个整数变量而不是使用临时存储的方式通常涉及这一行:

int a = 10;
int b = 42;

a ^= b ^= a ^= b; /*Here*/

printf("a=%d, b=%d\n", a, b); 
Run Code Online (Sandbox Code Playgroud)

但我想知道,复合赋值运算符^=不是序列点,是吗?这是否意味着它实际上是未定义的行为?

c undefined-behavior sequence-points compound-assignment

13
推荐指数
4
解决办法
617
查看次数

"| ="操作在C++中意味着什么?

我有以下代码,我无法理解它是什么意思:

var1 |= var2>0 ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我!

c++ java operators ternary-operator compound-assignment

12
推荐指数
4
解决办法
635
查看次数

复合赋值的自动(非)装箱失败

由于复合赋值和递增/递减运算符中的隐式转换,以下编译:

byte b = 0;
++b; b++; --b; b--;
b += b -= b *= b /= b %= b;
b <<= b >>= b >>>= b;
b |= b &= b ^= b;
Run Code Online (Sandbox Code Playgroud)

并且由于自动装箱和自动拆箱,以下还编译:

Integer ii = 0;
++ii; ii++; --ii; ii--;
ii += ii -= ii *= ii /= ii %= ii;
ii <<= ii >>= ii >>>= ii;
ii |= ii &= ii ^= ii;
Run Code Online (Sandbox Code Playgroud)

然而,以下代码段中的最后一行给出了编译时错误:

Byte bb = 0;
++bb; bb++; --bb; bb--; // ... okay …
Run Code Online (Sandbox Code Playgroud)

java autoboxing compiler-errors implicit-cast compound-assignment

8
推荐指数
1
解决办法
317
查看次数