首页 > 编程知识 正文

java请使用异或运算符(字符异或运算)

时间:2023-12-24 12:06:06 阅读:321522 作者:EPAF

本文目录一览:

java异或运算

java和c的执行是不一致的

相同之处:i ^= (j ^= (i ^= j)); java和C都是这个执行顺序;

不同之处:

java:执行完第一个(i ^= j)的时候,最左边的i的值还是1而不会是(i ^= j)的值

C:执行完第一个(i ^= j)的时候,最左边(第一个)i的值是(i ^= j)

你的程序改成这样就可以了:

j ^= i ^= j;

i ^= j;

i =i^j;

j=i^j;

i=i^j;

java怎样用异或进行

异或运算(^)都以二进制数据为基础进行的运算。也就是说当代码中使用到异或运算时,都会先将两个条件进行转换,转换成二进制数据后,再进行运算。异域中同位如果值相同(都是0或者都是1)则为0,不同(一个是0,一个是1)为1。

例如

int a=4;

int b=6;

int c = a^b;//c的值是a和b的异或。值为2.

过程

1、a的值二进制是

0000 0100 //这里去低8位,因为高位都一致。

2、b的值二进制是

0000 0110

3、异或后

0000 0010 //结果是2

java异或运算符求详细过程

int 32位,补码存储

        int a = 51;

        int b = -16;

        System.out.println("51  =" + Integer.toBinaryString(a));

        System.out.println("-16 =" + Integer.toBinaryString(b));

        int c = a^b;

        System.out.println("异或    =" + Integer.toBinaryString(c));

        System.out.println("即        =" + c);

51  =110011

-16 =11111111111111111111111111110000

异或    =11111111111111111111111111000011

原码为1000。。。111101

即        =-61

java中异或是怎样算的

概述

i = 14,异或算法转换二进制,同则取0异则取1;

解析

异或是一种基于二进制的位运算,用符号XOR或者^表示,其运算法则是对运算符两侧数的每一个进制位同值则取0,异值则取1.

简单理解就是不进位加法,如1+1=0,0+0=0,1+0=1.

For example:

3^5 = 6

转成二进制后就是 0011 ^ 0101 二号位和三号位都是异值取1 末尾两个1同值取零,所以3^5 = 0110 = 6

而 i = 50 ,j = 60;

所以:

i 的二进制 = 00110010

j 的二进制 = 00111100

同位相同取0,不同取1所以得出来的值为00001110

i = i ^ j;所以i = 00001110 = 14

拓展内容

异或运算符

性质

1、交换律 

2、结合律(即(a^b)^c == a^(b^c)) 

3、对于任何数x,都有x^x=0,x^0=x 

4、自反性 A XOR B XOR B = A xor 0 = A

异或运算最常见于多项式除法,不过它最重要的性质还是自反性:A XOR B XOR B = A,即对给定的数A,用同样的运算因子(B)作两次异或运算后仍得到A本身。这是一个神奇的性质,利用这个性质,可以获得许多有趣的应用。 例如,所有的程序教科书都会向初学者指出,要交换两个变量的值,必须要引入一个中间变量。但如果使用异或,就可以节约一个变量的存储空间: 设有A,B两个变量,存储的值分别为a,b,则以下三行表达式将互换他们的值 表达式 (值) : 

A=A XOR B (a XOR b) 

B=B XOR A (b XOR a XOR b = a) 

A=A XOR B (a XOR b XOR a = b)

#code:

google面试题的变形:一个数组存放若干整数,一个数出现奇数次,其余数均出现偶数次,找出这个出现奇数次的数?

java中的(或运算,异或运算,与运算)解释下

java中或运算、异或运算、与运算的使用实例和解释如下:

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

// 1、左移(  )        

// 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0:

//        // 0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20        System.out.println(5  2);// 运行结果是20         

// 2、右移(  ) 高位补符号位        

// 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:       

 // 0000 0000 0000 0000 0000 0000 0000 0001       

  System.out.println(5  2);// 运行结果是1         

  // 3、无符号右移(  ) 高位补0        

  // 例如 -5换算成二进制后为:0101 取反加1为1011       

   // 1111 1111 1111 1111 1111 1111 1111 1011        /

   / 我们分别对5进行右移3位、 -5进行右移3位和无符号右移3位:       

    System.out.println(5  3);// 结果是0       

     System.out.println(-5  3);// 结果是-1        

     System.out.println(-5  3);// 结果是536870911         

     // 4、位与(  )        

     // 位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0        

     System.out.println(5  3);// 结果为1        

     System.out.println(4  1);// 结果为0         

     // 5、位或( | )        

     // 第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0        

     System.out.println(5 | 3);// 结果为7         

     // 6、位异或( ^ )        

     // 第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0         

     System.out.println(5 ^ 3);//结果为6         

      // 7、位非( ~ )        // 操作数的第n位为1,那么结果的第n位为0,反之。        System.out.println(~5);// 结果为-6     } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。