美文网首页
2023-02-24 C语言^异或操作符使用

2023-02-24 C语言^异或操作符使用

作者: netppp | 来源:发表于2023-02-23 23:22 被阅读0次

异或,缩写成xor。异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”,在C语言上是一种位操作符。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。故异或运算性质与加减类似,故在交换律和结合律上也成立。
运算法则:

  1. a ⊕ a = 0(自己与自己相同,故为0)

  2. a ⊕ b = b ⊕ a(交换律)

  3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;(结合律,但本质上还是交换律)

  4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.(abc^d=0)

  5. a ⊕ b ⊕ a = b.(可由3推出)

按位异或的几个常见用途:
c语言中使用来表示异或运算(很多语言表示乘方)
我们先来计算一下这个问题,5^3=?

5和3转为二进制分别为:0101 、0011,所以0101^0011=0110,换为十进制即为6。

63=01100011=0101,化为10进制即为5,也验证了上面第4条运算法则

(1) 使某些特定的位翻转

例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。

10100001^00000110 = 10100111

(2) 实现两个值的交换,而不必使用临时变量。

例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:

a = a^b;   //a=10100111

b = b^a;   //b=10100001

a = a^b;   //a=00000110

(3)还可以找到一组数内只出现一次的数,只需要把所有数一起做异或运算

如:1 2 3 4 5 1 2 3 4

因为11=0,22=0,33=0,44=0,5^0=5

又异或满足交换律和结合律

123451234=5

所以5只出现了一次
https://blog.csdn.net/qq_52113349/article/details/123968817

相关文章

  • c++_动态对象创建

    一.c语言 c语言使用malloc 来创建堆对象 二.c++ new操作符 delete操作符 如果new []...

  • Java中&与&&、|与||的区别与联系

    前言 Java中逻辑操作符有&&(与)、||(或)、!(非),按位操作符有&(与)、|(或)、~(非)、^(异或)...

  • 周笔记(一)

    (1)C语言中的&有三种使用方式。 1 取地址操作符。单目运算,与其后的变量或常量[https://www.bai...

  • 2022-01-06 异或运算

    一些公式: N^0=N (a异或b)异或c = a异或(b异或c) 0^0=0

  • 【持续更新】C语言 第二天学习笔记(第四章)

    九、【了解】sizeof的介绍和使用 1、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他...

  • java与C同样代码,结果不一样

    在项目中使用了一个加密算法使用的 异或算法进行加密,java与c同样的代码,结果却不同,问题原因在与c语言的 un...

  • C语言运算符

    一.操作符 算数操作符C语言提供以下算数操作符  +    -    * /    % 除了%操作符,其...

  • 用 Python 加密文件!

    基础知识 在 Python 中异或操作符为:^,也可以记作 XOR。按位异或的意思是:相同值异或为 0,不同值异或...

  • sizeof

    sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式...

  • 如何不用临时变量实现两变量的值交换

    异或版本 实验: 加减法版本 或者这么写也可以, 乘除法版本 参考资料 如何理解「异或」的含义?C语言中位运算符异...

网友评论

      本文标题:2023-02-24 C语言^异或操作符使用

      本文链接:https://www.haomeiwen.com/subject/ocwtldtx.html