按位异或的用法总结

参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。
即:

0^0 = 0,  1^0 = 1,  0^1 = 1,  1^1 = 0

按位异或的3个特点:
(1) 0^0=0,0^1=1  0异或任何数=任何数
(2) 1^0=1,1^1=0  1异或任何数-任何数取反
(3) 任何数异或自己=把自己置0
按位异或的几个常见用途:
(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) 在汇编语言中经常用于将变量置零:
    xor   a,a

(4) 快速判断两个值是否相等
    举例1: 判断两个整数a,b是否相等,则可通过下列语句实现:
        return ((a ^ b) == 0)
    
    举例2: Linux中最初的ipv6_addr_equal()函数的实现如下:
    static inline int ipv6_addr_equal(const struct in6_addr *a1, const struct in6_addr *a2)
    {
        return (a1->s6_addr32[0] == a2->s6_addr32[0] &&
            a1->s6_addr32[1] == a2->s6_addr32[1] &&
            a1->s6_addr32[2] == a2->s6_addr32[2] &&
            a1->s6_addr32[3] == a2->s6_addr32[3]);
    }
    
    可以利用按位异或实现快速比较, 最新的实现已经修改为:
    static inline int ipv6_addr_equal(const struct in6_addr *a1, const struct in6_addr *a2)
    {
    return (((a1->s6_addr32[0] ^ a2->s6_addr32[0]) |
        (a1->s6_addr32[1] ^ a2->s6_addr32[1]) |
        (a1->s6_addr32[2] ^ a2->s6_addr32[2]) |
        (a1->s6_addr32[3] ^ a2->s6_addr32[3])) == 0);
    }

5  应用通式:

对两个表达式执行按位异或。

result = expression1 ^ expression2

参数
result

任何变量。

expression1

任何表达式。

expression2

任何表达式。

说明
^ 运算符查看两个表达式的二进制表示法的值,并执行按位异或。该操作的结果如下所示:

0101     (expression1)1100     (expression2)----1001     (结果)当且仅当只有一个表达式的某位上为 1 时,结果的该位才为 1。否则结果的该位为 0。

只能用于整数

下面这个程序用到了“按位异或”运算符:

class E 
{ public static void main(String args[ ]) 

  char  a1=‘十‘ ,  a2=‘点‘ ,  a3=‘进‘ ,  a4=‘攻‘ ; 
  char secret=‘8‘ ; 
  a1=(char) (a1^secret); 
  a2=(char) (a2^secret); 
  a3=(char) (a3^secret); 
  a4=(char) (a4^secret); 
  System.out.println("密文:"+a1+a2+a3+a4); 
  a1=(char) (a1^secret); 
  a2=(char) (a2^secret); 
  a3=(char) (a3^secret); 
  a4=(char) (a4^secret); 
  System.out.println("原文:"+a1+a2+a3+a4); 

}

就是加密啊解密啊

char类型,也就是字符类型实际上就是整形,就是数字.

计算机里面所有的信息都是整数,所有的整数都可以表示成二进制的,实际上计算机只认识二进制的. 
位运算就是二进制整数运算啦. 
两个数按位异或意思就是从个位开始,一位一位的比. 
如果两个数相应的位上一样,结果就是0,不一样就是1 
所以111^101=010 
那加密的过程就是逐个字符跟那个secret字符异或运算. 
解密的过程就是密文再跟同一个字符异或运算 
010^101=111 
至于为什么密文再次异或就变原文了,这个稍微想下就知道了..

按位异或的用法总结,布布扣,bubuko.com

时间: 2024-10-13 12:27:27

按位异或的用法总结的相关文章

java基础:运算符的基本用法

运算符: 就是对常量和变量进行操作的符号. 算数运算符: A:+,-,*,/,%,++,-- B:+的用法 a:加法 b:正号 c:字符串连接符 C:/和%的区别 数据做除法操作的时候,/取得是商,%取得是余数 D:++和--的用法 a:他们的作用是自增或者自减 b:使用 **单独使用 放在操作数据的前面和后面效果一样. a++或者++a效果一样. **参与操作使用 放在操作数的前面:先自增或者自减,再参与操作 int a = 10; int b = ++a; 放在操作数的后面:先参与操作,再自

python运算符与用法

运算符与用法 运算符 名称 说明 例子 + 加 两个对象相加 3 + 5得到8.'a' + 'b'得到'ab'. - 减 得到负数或是一个数减去另一个数 -5.2得到一个负数.50 - 24得到26. * 乘 两个数相乘或是返回一个被重复若干次的字符串 2 * 3得到6.'la' * 3得到'lalala'. ** 幂 返回x的y次幂 3 ** 4得到81(即3 * 3 * 3 * 3) / 除 x除以y 4/3得到1(整数的除法得到整数结果).4.0/3或4/3.0得到1.3333333333

C#位运算符的基本用法

位运算符包括:| 按位或 OR,& 按位与 AND,^ 按位异或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等.本篇体验位运算符在C#中的应用.主要包括: ○ 进制转换    ※ 十进制转换成二进制    ※ 二进制转换成十进制○ | 按位或操作符○ & 按位与操作符○ ^ 按位异或操作符    ※ 使用^按位异或交换2个数    ※ 使用^按位异或进行加密运算○ ~ 取反操作符○ x << n 左

按位与,按位异或,按位取反

**& 按位与,相同的不变,否则都算成0 | 按位或, ^ 按位异或,不相同的都算成1** PHP按位与或 (^ .&)运算也是很常用的逻辑判断类型,有许多的PHP新手们或许对此并不太熟悉,今天结合一些代码对PHP与或运算做些介绍,先说明下,在PHP中,按位与主要是对二进制数操作: <?php $a = 1; $b = 2; $c = $a^b; echo $c // 3 ?> 十进制1换算成二进制为:00000001十进制2换算成二进制为:00000010按位^ 000000

3rd 逻辑运算符的基本用法

03.01_Java语言基础(逻辑运算符的基本用法)(掌握) A:逻辑运算符有哪些 &,|,^,! &&,|| B:案例演示 逻辑运算符的基本用法 注意事项: a:逻辑运算符一般用于连接boolean类型的表达式或者值. b:表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子. 算术表达式:a + b 比较表达式:a == b(条件表达式) C:结论: &逻辑与:有false则false. |逻辑或:有true则true. ^逻辑异或:相同为false,不同

【Java中各运算符的用法】

Java的运算符可分为4类:算术运算符.关系运算符.逻辑运算符和位运算符. 1.算术运算符 Java的算术运算符分为一元运算符和二元运算符.一元运算符只有一个操作数:二元运算符有两个操作数,运算符位于两个操作数之间.算术运算符的操作数必须是数值类型. (1)一元运算符: 一元运算符有:正(+).负(-).加1(++)和减1(--)4个. 加1.减1运算符只允许用于数值类型的变量,不允许用于表达式中.加1.减1运算符既可放在变量之前(如++i),也可放在变量之后(如i++),两者的差别是:如果放在

【SqlServer】SqlServer编程语言T-SQL的简介及基本用法

一.T-SQL概述 SQL Server用于操作数据库的编程语言为Transaction-SQL,简称T-SQL.T-SQL与PL/SQL不同,并没有固定的程序结构.T-SQL包括以下4个部分: DDL:定义和管理数据库及其对象,例如create.alter和drop等.    DML:实现对数据库表各对象的操作,例如insert.update等.    DCL:数据控制语言,实现对数据库进行安全管理和权限管理等控制,例如grant.revoke.deny等.    附加的语言元素.T-SQL的

&amp;,|,^的用法

&,|,^的用法 &按位与 |按位或 ^按位异或 举例: int x = 5; int y = 11; System.out.println(x|y); System.out.println(x&y); System.out.println(x^y); 结果是15, 1 ,14 分析: x=5 (0101二进制) y=11(1011二进制) x&y = 0001 = 1 x|y = 1111 = 15 x^y = 1110 = 14 ^的运用与性质 原文地址:https:/

异或的用法

异或用法(转) 转自:https://www.lijinma.com/blog/2014/05/29/amazing-xor/ 什么是异或? Wikipedia的解释: 在逻辑学中,逻辑算符异或(exclusive or)是对两个运算元的一种逻辑析取类型,符号为 XOR 或 EOR 或 ⊕(编程语言中常用^).但与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真.转化为命题,就是:“两者的值不同.”或“有且仅有一个为真.” 定义: 1 ⊕ 1 = 0 0