C++使用 11 个字符的代码交换两个数字
C++ swap two numbers using 11 chars of code
我的朋友给我发了一个他做不到的练习:
(C++)
int main()
{
unsigned int x = 0xB0FF14a5;
unsigned int y = 0x7340c00e;
// enter code here
if(x==0x7340c00e && y==0xB0FF14a5) victory();
return 0;
}
主要目标是运行victory()
函数。
假设:
-最多 11 个字符
-您不能使用:"主要","胜利","asm","&","*","(","/"
-您只能使用一个分号
我尝试了#define
和其他一些东西,但什么都没有(我不是C++主人):/
我不知道如何解决这个问题;感谢您的帮助!
使用 XOR 交换算法:
x^=y^=x^=y;
这等效于(通常,见下文):
//x==A, y==B
x ^= y; //x==A^B, y==B
y ^= x; //x==A^B, y==A
x ^= y; //x==B, y==A
它之所以有效,是因为两次按相同的数字进行异或运算会给您原始数字。
在 C++03 中,单表达式版本是未定义的行为,因此可能无法在所有编译器/平台上正常工作。这是因为变量的修改和使用之间没有序列点。
在 C++11 中,它有明确的定义。该标准说(5.17.1):
在所有情况下,赋值都是在左右操作数的值计算之后以及赋值表达式的值计算之前排序的。
未定义的行为,但适用于我的电脑:
x^=y^=x^=y;
更新:显然,自2011年以来,这是明确的;请参阅Interjay的答案。
13 个字符并违反其他规则,但完成了工作并且太可爱了,无法发布:
#include<iostream>
void victory()
{
std::cout << "Yes we cann";
}
int main()
{
unsigned int x = 0xB0FF14a5;
unsigned int y = 0x7340c00e;
#define if(x)
if(x==0x7340c00e && y==0xB0FF14a5) victory();
return 0;
}
在 Ideone 上的输出
看看这个算法: 异或交换算法但是你会得到一个编译警告,比如:
warning: operation on ‘x’ may be undefined
如果您只在一行中使用此算法
x ^= y ^= x ^= y;
相关文章:
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- 如何在单个链表中交换两个节点的位置,只修改指针
- 是否可以在C++中使用宏交换两个变量的出现?
- 如何以通用方式交换两个值
- 为什么不交换两个节点?
- 使用用户函数在 C++ 中交换两个结构
- 编写一个功能,该函数将使用框架交换两个整数
- 如何在没有复制赋值运算符的情况下交换两个对象
- 如何在多线程 c++ 17 程序中交换两个指针
- 尝试使用 {} 和 std::make_pair() 交换两个变量时的行为不同
- C :交换两个不同向量的两个元素
- 在Variadic模板中交换两个参数
- C 交换两个void*的内容
- 交换两个类实例的最安全方法
- 为什么基于指针交换两个值在函数范围之外不起作用?
- 交换两个 std::array<T、100> 对象的成本是多少?
- 如何使用C++引用交换两个 C 样式字符串
- 为什么 a = (a+b) - (b=a) 是交换两个整数的糟糕选择
- 想要一种在C++中交换两个指针的有效方法