java按位异或的运算是,深入理解按位异或运算符

java按位异或的运算是,深入理解按位异或运算符参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。即:0^0=0,1^0=1,0^1=1,1^1=0按位异或的3个特点:(1)0^0=0,0^1=10异或任何数=任何数(2)1^0=1,1^1=01异或任何数-任何数取反(3)任何数异或自己=把自己置0按位异或的几个常见用途:(1)使某些特定的位翻转例如对数10100001的第2位和第3位翻转,则…

大家好,又见面了,我是你们的朋友全栈君。

参与运算的两个值,如果两个相应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

至于为什么密文再次异或就变原文了,这个稍微想下就知道了..

posted on 2013-07-18 18:55 奋斗成就男人 阅读(158) 评论(0)  编辑  收藏

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134934.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • windows环境下用c++实现socket编程

    windows环境下用c++实现socket编程一、什么是Socketsocket即套接字,用于描述地址和端口,是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);前两种较常用。基于TCP的socket编程是采用的流式套接字。(1)SOCK_STREAM表示面向连接的

  • ubuntu安装go语言_go语言web服务器

    ubuntu安装go语言_go语言web服务器来源:微信公众号「编程学习基地」文章目录简介下载go安装包环境配置添加环境变量第一个go语言程序go入门学习简介go语言是一种开源的、语法精简的静态编程语言,它的开源社区比较庞大,应用场景非常广范。可以用于系统监控、容器技术(Docker)、大数据、存储技术、分布式系统(HyperledgerFabric)、消息系统(Kafka客户端)、服务器管理、安全工具、Web工具等。这里介绍在Linux上安装并配置go。下载go安装包到GoLang中国,下载Go语言安装包。解压tar-xzv..

    2022年10月12日
  • webpack图片压缩_webpack的cdn

    webpack图片压缩_webpack的cdn图片处理url-loader(webpack5之前的处理方式)在项目开发中,我们时长会需要使用到图片,比如在img文件夹中有图片test1.png,然后在normal.css中会引用到图片body

  • linux上安装使用mysql(linux登录mysql数据库)

    首先明确大体步骤为3步1.下载数据库的压缩包或二进制包,可以在linux用wget或yum下载,也可以外网下载再传到linux2.配置数据库的环境和路径3.登陆数据库修改一.我这里是用wgethttps://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz下…

  • TCP三次握手四次挥手(通俗易懂版)

    TCP三次握手四次挥手(通俗易懂版)TCP连接的建立(三次握手)最开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的为客户端,被动打开连接的是服务器。三次握手通俗理解:TCP客户端是男孩子,TCP服务器是女孩子,男孩子要追女孩子,首先要建立恋爱关系。需要一个建立恋爱关系的过程。男孩:我们可以恋爱吗?(客户端请求服务器建立连接)女孩:你想追我?想清楚了!(服务器要求客户端确认连接)男孩:没错,你就是我的梦…

  • 2021年材料员-岗位技能(材料员)新版试题及材料员-岗位技能(材料员)考试试卷

    2021年材料员-岗位技能(材料员)新版试题及材料员-岗位技能(材料员)考试试卷题库来源:安全生产模拟考试一点通公众号小程序安全生产模拟考试一点通:硝化工艺题库来源:安全生产模拟考试一点通公众号小程序安全生产模拟考试一点通:硝化工艺考试内容是安全生产模拟考试一点通生成的,硝化工艺证模拟考试题库是根据硝化工艺最新版教材汇编出硝化工艺仿真模拟考试。2021年硝化工艺考试内容及硝化工艺考试报名1、【单选题】三不动火是指:没有经批准的动火作业票不动火;监护人不在现场不动火;()。(A)A、安全措施不落实不动火B、分析不合格不动火C、领导不在现场不动火2、【单选题】苯硝化

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号