Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异或交换输出预测 #包括 虚无乐趣(char a[]{ a[0]^=a[1]^=a[0]^=a[1]; } int main(int argc,字符**argv){ charb[10]; b[0]='h'; b[1]='j'; 乐趣(b); printf(“%c”,b[0]); 返回0; }_C_Swap_Xor - Fatal编程技术网

异或交换输出预测 #包括 虚无乐趣(char a[]{ a[0]^=a[1]^=a[0]^=a[1]; } int main(int argc,字符**argv){ charb[10]; b[0]='h'; b[1]='j'; 乐趣(b); printf(“%c”,b[0]); 返回0; }

异或交换输出预测 #包括 虚无乐趣(char a[]{ a[0]^=a[1]^=a[0]^=a[1]; } int main(int argc,字符**argv){ charb[10]; b[0]='h'; b[1]='j'; 乐趣(b); printf(“%c”,b[0]); 返回0; },c,swap,xor,C,Swap,Xor,这个代码有什么问题。它应该交换b[0]和b[1],但它不交换a[0]^=a[1]^=a[0]^=a[1]。未定义求值和赋值顺序。第1104页的“”一书给出了xor交换的两种变体: #include <stdio.h> void fun(char a[]){ a[0]^=a[1]^=a[0]^=a[1]; } int main(int argc, char **argv){ char b[10]; b[0]='h'; b[1]='j'; fun(b);

这个代码有什么问题。它应该交换
b[0]
b[1]
,但它不交换
a[0]^=a[1]^=a[0]^=a[1]。未定义求值和赋值顺序。

第1104页的“”一书给出了xor交换的两种变体:

#include <stdio.h>

void fun(char a[]){

  a[0]^=a[1]^=a[0]^=a[1];

}

int main(int argc, char **argv){

  char b[10];
  b[0]='h';
  b[1]='j';
  fun(b);
  printf("%c",b[0]);

  return 0;
}

因此,第二个变量是不可移植的,并且是不正确的。

+1 C99 6.5/2:“在上一个序列点和下一个序列点之间,一个对象的存储值最多只能通过表达式的计算修改一次。此外,访问前一个值只能确定要存储的值。”很好,我想说‘你试过没有链接吗?^=忘记异或,使用临时的——它更可读、更可靠,可能也更有效。有趣的是,人们如何调用他们的函数
fun()
,尽管他们不会做有趣的事情。序号:-)
Example
1 #define SWAP(x, y) (x=(x ^ y), y=(x ^ y), x=(x ^ y))

2 #define UNDEFINED_SWAP(x, y) (x ^= y ^= x ^= y) 
     /* Requires right to left evaluation. */