我的朋友给我发了一个他不能做的练习:
(C++)
int main()
{
    unsigned int x = 0xB0FF14a5;
    unsigned int y = 0x7340c00e;
    // enter code here
    if(x==0x7340c00e && y==0xB0FF14a5) victory();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
主要目标是运行victory()功能.
假设:
-max 11个字符
- 你不能使用:"main","victory","asm","&","*","(","/" 
- 你只能用一个分号
我试过#define和其他一些东西,但没有(我不是C++大师):/ 
我不知道如何解决这个问题;感谢您的帮助!
int*_*jay 12
使用XOR交换算法:
x^=y^=x^=y;
Run Code Online (Sandbox Code Playgroud)
这相当于(通常见下文):
          //x==A,   y==B
x ^= y;   //x==A^B, y==B
y ^= x;   //x==A^B, y==A
x ^= y;   //x==B,   y==A
Run Code Online (Sandbox Code Playgroud)
它的工作原理是因为两次相同的XORing可以得到原始数字.
在C++ 03中,单表达式版本是未定义的行为,因此可能无法在所有编译器/平台上正常工作.这是因为修改和使用变量之间没有序列点.
在C++ 11中,它是明确定义的.标准说(5.17.1):
在所有情况下,分配的右侧和左侧的操作数的值计算后测序,并赋值表达式的值计算之前.
未定义的行为,但在我的电脑上工作:
x^=y^=x^=y;
Run Code Online (Sandbox Code Playgroud)
更新:显然,这是自2011年以来的明确定义; 看到interjay的回答.