开发者社区> 问答> 正文

java中异或是怎样算的

例如i=50;j=60;i=i^j;那i是多少,怎样算的啊

展开
收起
知与谁同 2018-07-16 16:49:49 2193 0
4 条回答
写回答
取消 提交回答
  • 杀人者,打虎武松也。
    先把i和j的真值转换为补码,即:i=0011 0010 ,j=0011 1100;然后再进行异或运算(即相异为1)为:0000 1110;再将这个结果转为原码输出,结果为:14
    2019-07-17 22:57:42
    赞同 展开评论 打赏
  • 因为你举得例子数字比较小,我们假设你说的50,60都是byte类型,java的byte用8位二进制来表示。50=00110010,60=00111100,异或是属于位运算符,还有&(或),|(非),~(非)运算符,理论上还有12种,离散数学里会有。其中异或就是将两个操作数按位进行异或操作,规则是1^0=1,0^1=1,0^0=0,1^1=0;所以00110010^00111100=00001110,转换成十进制就是14,所以i^j=14。然后执行赋值操作,所以i=14。
    2019-07-17 22:57:42
    赞同 展开评论 打赏
  • 异或这些位运算都是针对二进制的。
    i的二进制为110010.
    j的二进制为111100.
    110010
    111100
    001110=>这就是结果了。最后转换为十进制 14
    一位一位的看,异或是相同为0 不同为1.
    2019-07-17 22:57:42
    赞同 展开评论 打赏
  • 胜天半子

    异或运算(^)都以二进制数据为基础进行的运算。也就是说当代码中使用到异或运算时,都会先将两个条件进行转换,转换成二进制数据后,再进行运算。异域中同位如果值相同(都是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

    2019-07-17 22:57:42
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
OpenCrypto Unchaining the Java 立即下载
Java Your(Next) 立即下载
Java8从入门到精通 立即下载