java中反异或运算代码 java取反代码

java异或运算符求详细过程

int 32位,补码存储

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、网站建设、双湖网络推广、小程序定制开发、双湖网络营销、双湖企业策划、双湖品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供双湖建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

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中四个二进制位从操作符即(&按位与、|按位货、^按位异或、~按位取反)

首先回答你问的问题:

按位与运算符()

参加运算的两个数据,按二进制位进行“与”运算。

运算规则:00=0; 01=0; 10=0; 11=1;

即:两位同时为“1”,结果才为“1”,否则为0

例如:35 即 0000 0011 0000 0101 = 0000 0001 因此,35的值得1。

另,负数按补码形式参加按位与运算。

“与运算”的特殊用途:

(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

(2)取一个数中指定位

方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。

例:设X=10101110,

取X的低4位,用 X 0000 1111 = 0000 1110 即可得到;

还可用来取X的2、4、6位。

按位或运算符(|)

参加运算的两个对象,按二进制位进行“或”运算。

运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;

即 :参加运算的两个对象只要有一个为1,其值为1。

例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。

另,负数按补码形式参加按位或运算。

“或运算”特殊作用:

(1)常用来对一个数据的某些位置1。

方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。

例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

异或运算符(^)

参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

“异或运算”的特殊作用:

(1)使特定位翻转找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。

例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。

(2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110。

从上面的例题可以清楚的看到这一点。

取反运算符(~)

参加运算的一个数据,按二进制位进行“取反”运算。

运算规则:~1=0; ~0=1;

即:对一个二进制数按位取反,即将0变1,1变0。

使一个数的最低位为零,可以表示为:a~1。

~1的值为1111111111111110,再按“与”运算,最低位一定为0。因为“~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。

然后在附送你两个为运算符的解释:

左移运算符()

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

例:a = a 2 将a的二进制位左移2位,右补0,

左移1位后a = a * 2;

若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

右移运算符()

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

操作数每右移一位,相当于该数除以2。

例如:a = a 2 将a的二进制位右移2位,

左补0 or 补1 得看被移数是正还是负。

如果还有什么疑问,可以参考一下参考资料

希望我的回答对您有帮助,别忘了采纳答案哦~

JAVA按位异或运算问题

首先取反运算符优先级高于异或运算符

其次int是32位

28 = 0001 1100(前面16位不写了)

8 = 0000 1000

-8 = 1111 1000

-28 = 1110 0100

所以a=28^-8 = 0001 1100 ^ 1111 1000 = 1110 0100 = -28

a=-28^8 = 1110 0100 ^ 0000 1000 = 1110 1100 = -20

是-20,不是20。楼主看清楚了。

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     } }

JAVA中如何对一个字符串里的字符做异或运算,例如,字符串A=cghjhgfgsdyugh;第一步

Java代码:

public class test{

public static void main(String[] args) {

String source = "cghjhgfgsdyugh";

int ch = source.charAt(0);

for(int i=1; isource.length(); i++) {

ch ^= source.charAt(i);

}

System.out.printf("%d : %c\n", ch, ch);

}

}

运行测试:

28 :


当前标题:java中反异或运算代码 java取反代码
分享地址:http://myzitong.com/article/dodgeei.html