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

C语言 异或运算符 ^

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

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_2

事件的拥有者与事件的响应者是分开的情况+=是事件订阅操作符,左边是事件,右边是事件处理器。using System; using System.Windows.Forms; /// <summary> /// 事件的拥有者和事件的响应者是...

C# 正则表达式(2)

// pattan = @"[^ahou]"; 表示匹配除ahou之外的字符,^在表示反义 string res4 = Regex.Replace(s, @"[^ahou]",&...

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

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

C# 与文件访问相关的常用的类:File类、Directory类、Path类、FileInfo类、DirectoryInfo类、FileSystemInfo类、FileSystemWatcher类以上几个类均在System.IO命名空间下。挨个说吧:File类:静态类,只有静态方法,用于移...

偶然想到的一个问题。。。

偶然想到的一个问题。。。

今天突然想C#中,用数组中的Max()方法和直接通过比较获取最大值的时间谁快,于是试了试:       static void Main(string[] args)   &nb...

C# 抽象类与接口的比较

相同:都不能被实例化都包含未实现的方法派生类必须实现未实现的方法不同:抽象类可以包含抽象成员,也可以包含非抽象成员,即抽象类可以是完全实现的,也可以是部分实现的,或者是完全不实现的。接口更像是只包含抽象成员的抽象类,或者说接口内的成员都是未被实现的。一个类只能继承一个抽象类(当然其它类也一样),但是...

C# Stack堆栈

Stack代表了一个先入后出的对象集合。有以下常用方法:表 3Clear()从 Stack 中移除所有对象。Contains(Object)确定某元素是否在 Stack 中。CopyTo(Array, Int32)从指定的数组索引处开始,将 Stac...