相关疑难解决方法(0)

在不使用第三个变量的情况下交换两个变量值

在采访中提出的一个非常棘手的问题.

交换两个变量的值,如a=10b=15.

通常要交换两个变量值,我们需要第三个变量,如:

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

现在的要求是,在不使用第三个变量的情况下交换两个变量的值.

c++

97
推荐指数
6
解决办法
10万
查看次数

使用此复合形式时,为什么使用XOR交换值失败?

我发现这个代码使用XOR ^运算符交换两个数字而不使用第三个变量.

码:

int i = 25;
int j = 36;
j ^= i;       
i ^= j;
j ^= i;

Console.WriteLine("i:" + i + " j:" + j);

//numbers Swapped correctly
//Output: i:36 j:25
Run Code Online (Sandbox Code Playgroud)

现在我将上面的代码更改为此等效代码.

我的代码:

int i = 25;
int j = 36;

j ^= i ^= j ^= i;   // I have changed to this equivalent (???).

Console.WriteLine("i:" + i + " j:" + j);

//Not Swapped correctly            
//Output: i:36 j:0
Run Code Online (Sandbox Code Playgroud)

现在,我想知道,为什么我的代码输出不正确?

c# swap xor

76
推荐指数
3
解决办法
4716
查看次数

为什么`i = ++ i + 1`未指明行为?

请考虑以下C++标准ISO/IEC 14882:2003(E)引用(第5节,第4段):

除非另有说明,否则单个运算符的操作数和单个表达式的子表达式的评估顺序以及副作用发生的顺序是未指定的.53)在前一个和下一个序列点之间,标量对象应通过表达式的计算最多修改其存储值一次.此外,只能访问先前值以确定要存储的值.对于完整表达式的子表达式的每个允许排序,应满足本段的要求; 否则行为未定义.[例:

i = v[i++];  // the behavior is unspecified 
i = 7, i++, i++;  //  i becomes 9 

i = ++i + 1;  // the behavior is unspecified 
i = i + 1;  // the value of i is incremented 
Run Code Online (Sandbox Code Playgroud)

- 末端的例子]

我很惊讶,i = ++i + 1给出了一个未定义的值i.有没有人知道编译器实现不能给出2以下情况?

int i = 0;
i = ++i + 1;
std::cout << i << std::endl;
Run Code Online (Sandbox Code Playgroud)

事情是operator=有两个args.第一个总是i参考.在这种情况下,评估顺序无关紧要.除了C++ Standard禁忌之外,我没有看到任何问题.

,不要考虑这样的情况下,参数的顺序是评价非常重要.例如, …

c++ standards variable-assignment

44
推荐指数
7
解决办法
3622
查看次数

C++中变量的多个预增量运算(C?)

为什么以下用C++编译?

int phew = 53;
++++++++++phew ;
Run Code Online (Sandbox Code Playgroud)

相同的代码在C中失败,为什么?

c c++ operators operator-precedence pre-increment

17
推荐指数
2
解决办法
2784
查看次数

如何包含头文件

我如何导入头文件是否重要?我看过双引号和箭头.

#include <stdlib.h>
#include "Some_Header.h"
Run Code Online (Sandbox Code Playgroud)

如果他们也以某种方式资本化是否重要?试验这一点似乎无关紧要,但我认为教学必须有这样做的理由.

另一个问题是,(来自Java这里),如何访问其定义的文件之外的类?说,我有one.cpp和two.cpp.

在one.cpp中:

class Something {
    ...
Run Code Online (Sandbox Code Playgroud)

在two.cpp中:

class SomethingElse {
    Something *example;
    ...
Run Code Online (Sandbox Code Playgroud)

像那样?在Java中,您只需在"public"前面添加一个类名.在C++中,争论类似乎有点困难.

c++ header-files

14
推荐指数
4
解决办法
7万
查看次数

为什么这个语句不适用于java x ^ = y ^ = x ^ = y;

int x=1;
int y=2;
x ^= y ^= x ^= y;
Run Code Online (Sandbox Code Playgroud)

我期待值被交换.但它给出x = 0和y = 1.当我尝试使用C语言时,它会给出正确的结果.

java swap xor undefined-behavior

14
推荐指数
2
解决办法
2851
查看次数

你什么时候不用第三个变量交换两个数字?

我已经阅读了几个来源,讨论如何在不使用第三个变量的情况下交换两个数字.以下是一些最相关的:

我理解为什么在大多数情况下使用所描述的方法没有意义:代码变得混乱且难以阅读,并且通常比使用第三个"临时"变量的解决方案执行得更慢.但是,我发现的所有问题都没有讨论双变量方法在实践中的任何好处.他们是否有任何救赎品质或利益(历史或现代),或者它们仅作为晦涩的编程琐事有用吗?

algorithm swap coding-style

4
推荐指数
1
解决办法
2041
查看次数

如何在目标c中交换两个变量的值而没有第三个变量

嘿家伙我想要你的建议,如何在没有第三个变量的情况下改变两个变量的值.目标cc.有没有办法通知我,

iphone objective-c

1
推荐指数
2
解决办法
6278
查看次数

这个技巧总能奏效吗?

可能重复:
"在不使用第三个变量的情况下交换两个变量的值"中的潜在问题

我最近在一个社区中读到,我们可以轻松地交换两个数字而不使用第三个使用XOR技巧.

立方公尺= N ^ =立方公尺= N; 提到了一些技巧.

你们有什么感想?这个技巧总是有用吗?

c c++

0
推荐指数
1
解决办法
279
查看次数