当前位置:首页 > 代码相关 > 正文内容

C语言 异或运算符 ^

admin5年前 (2020-08-26)代码相关11097

C语言中异或运算符^表示参见运算的二进制运算符相同为0,不同为1,如下:

1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0

下面举例说明∧运算符的应用:

  (1)使特定位翻转

  假设有01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行∧运算,即结果值的低4位正好是原数低4位的翻转。要使哪几位翻转就将与其∧运算的该几位置为1即可。这是因为原数中值为1的位与1进行∧运算得0,原数中的位值0与1进行∧运算的结果得1。

  (2)与0相∧,保留原值

  如012∧00=012,因为原数中的1与0进行∧运算得1,0∧0得0,故保留原数。

  (3)交换两个值,不用临时变量

  假如a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:

  a = a ∧ b;
  b = b ∧ a;
  a = a ∧ b;


即等效于以下两步:

  ① 执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。而b∧a∧b等于a∧b∧b。b∧b的结果为0,因为同一个数与本身相∧,结果必为0。因此b的值等于a∧0,即a,其值为3。

  ② 再执行第三个赋值语句:a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。

  a得到b原来的值。

以上来自:http://blog.sina.com.cn/s/blog_74a459380101d6xl.html

例子:

#include <stdio.h>
#include <stdlib.h>

void swap_int(int *a, int *b);
int main()
{
    int a = 10;
    int b = 20;
    printf("a = %d
b = %d
", a, b);
    swap_int(&a, &b);
    printf("a = %d
b = %d
", a, b);

    system("pause");
    return 0;
}

void swap_int(int *a, int *b)
{
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}


扫描二维码推送至手机访问。

版权声明:本文由lovedm.club发布,如需转载请注明出处。

本文链接:https://lovedm.club/?id=77

分享给朋友:

“C语言 异或运算符 ^” 的相关文章

C#事件_Sample_3

事件的拥有者同时是事件的响应者using System; using System.Windows.Forms; /// <summary> /// 事件的拥有者同时是事件的响应者 /// </summary> na...

C# 与文件相关的几个类(3)

Path类,处理文件或路径的类,是一个静态类。方法:PathChangeExtension(String, String)更改路径字符串的扩展名。返回值为string。Combine(String, String)将两个字符串组合成一个路径。GetDirectoryName(String)返回指定路...

C#(或者Java)反转数组

将原数组反转,如[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]反转后变为[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]因为数组是引用类型,所以直接在方法中处理即可,C#和Java写法一样,如下:      &nb...

C# 通过事件传递参数

C# 通过事件传递参数

20200622气死我了,一开始写的很详细,提交的时候因为长时间未操作提交失败了,今天懒得再写了,只把代码贴出来算了。事件发布相关类:public class ProEventArgs : EventArgs {    &nb...

C语言malloc()函数

C语言中malloc()函数,用于分配所需的内存,并返回一个指向该内存的指针。注意这是C的标准库函数,不是C的关键字,在<stdlib.h>头文件下。函数声明: void *malloc(size_t size)其中,size是要分配的内存的大小,单位是字节。返回一个指针 ,指向已分配大...

C语言scanf一个容易出错的地方

今天用scanf()写一个数组循环输入,运行时很奇怪,明明只需要输入三个数,但是实际上要多输入一个,瞅了好一会才看到我是这么写的scanf("%d ",&p[i]);问题就出在这个 上,写printf()写习惯了,顺手就加上了 ,注意不要加!不要加!...