精华内容
下载资源
问答
  • 异或实现变量交换

    2017-08-07 23:29:11
    2交换变量内容,参考方法而已。 #include #include int main( int argc, char *argv []) { int a=- 7 ,b= 8 ; printf ( "a= %d ,b= %d " ,a,b); // 实现交换 a=a^b; b=b^a; a=a^b; printf...

    异或运算特点:
    1如果a^b=c,那么就有c^b=a以及c^a=b,此规律可用于加密解密。
    2交换变量内容,参考方法而已。

    #include <iostream>
    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        int a=-7,b=8;
        printf("a=%d,b=%d",a,b);
        //实现交换
        a=a^b;
        b=b^a;
        a=a^b;
    
        printf("a=%d,b=%d",a,b);
        return 0;
    }
    展开全文
  • java异或实现变量交换

    2019-02-13 22:59:48
    只正对整型和字符串 int a = 100; int b = 50; a = a ^ b; b = a ^ b; a = a ^ b;  

    只正对整型和字符串

    int a = 100;
    int b = 50;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

     

    展开全文
  • 一个数据对另一个数据位异或两次,该数本身不变。int a = 10; int b = 20; System.out.println(a^b^b); //10 System.out.println(a^b^a); //20 交换a、b的值int a = 10; int b = 20; a = a ^ b; b = a ^ b; //a ^ b ...

    一个数据对另一个数据位异或两次,该数本身不变。
    int a = 10;
    int b = 20;
    System.out.println(a^b^b); //10
    System.out.println(a^b^a); //20
    

    交换a、b的值
    int a = 10;
    int b = 20;
    a = a ^ b;
    b = a ^ b;  //a ^ b ^ b = a 
    a = a ^ b;  //a ^ b ^ a = b

    一句话搞定:
    b =(a+b) - (a = b)
    展开全文
  • 基本位运算符位与、位或、位取反、位异或;位移运算符、数据交换

    目录

    1. 基本位运算符

    2. 位移运算符

    3. 数据交换


    1. 基本位运算符

    位运算符指的是二进制位的运算,先将十进制数转换成二进制后再进行计算,在二进制中,1表示true,0表示false

    • 位与:&,遇false则false,遇0则0
    • 位或:|,遇true则true,遇1则1
    • 位异或:^,相同为false,不同为true。一个数,被另外一个数,异或两次,该数本身不变
    • 位取反:~,全部取反,0变1,1变0(包括符号位)

    例如:System.out.println(~6); //结果:-7,

    运算过程为:

    1. 6转换成二进制:00000000 00000000 00000000 00000110
    2. 全部取反:11111111 11111111 11111111 11111001
    3. 取反后的为负数,二进制数在计算机中是以补码形式运算,所以此时得到的应为补码形式
    4. 想获得对应十进制表示形式,就得从补码转换成原码
    5. 补码转反码:减1得到 11111111 11111111 11111111 11111000
    6. 反码变原码,除符号位,其余全部取反得到10000000 00000000 00000000 00000111
    7. 最高位是1,为负数。转换十进制为:-7

    2. 位移运算符

    有符号左移运算符:<<

    • 二进制位向左移动,左边符号位丢弃,右边补0

    • 运算规律:向左移动几位,就是乘以2的几次幂

    • System.out.println(12 << 1);   //结果:24 

    • System.out.println(-12<<1);    //结果:-24

    有符号右移运算符:>>

    • 二进制位向右移动,使用符号位进行补位

    • 规律:向右移动几位,就是除以2的几次幂

    • System.out.println(4 >> 1);    //结果:2

    无符号右移运算符:>>>

    • 无论符号位是0还是1,都补0

    • 会使负数变为正数,使用很少

    • System.out.println(-1 >>> 1);   分析过程:

    1.  -1转换成二进制:10000000 00000000 00000000 00000001(负数在计算机中用补码参与运算)
    2.  反码:11111111 11111111 11111111 11111110
    3. 补码:11111111 11111111 11111111 11111111
    4. 右移1位:01111111 11111111 11111111 11111111
    5. 右移之后,变成正数,正数的原码和补码一样,所以直接转换成十进制为:2147483647

    3. 数据交换

    方法一:引入第三方变量交换数据

    int a = 1;
    int b = 2;
    int temp = a;
    a = b;
    b = temp;

    方法二:使用异或^,一个数,被另外一个数异或两次,该数本身不变

    int a = 10;
    int b = 20;
    a = a ^ b;// a = 10 ^ 20
    b = a ^ b;// b = 10 ^ 20 ^ 20 = 10
    a = a ^ b;// a = 10 ^ 20 ^ 10 = 20

     

    如有错误欢迎留言评论,及时更正!  羽露风 5月14日

    展开全文
  • 交换两个数的值,通常用利用一个变量交换数值,异或交换两个数的值是资源开销最小的方法,不需要中介数,原理简单的来说就是异或的负负得正
  • 运算符:对常量和变量进行操作时使用的符号就称之为运算符 2,分类 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 三元(三目)运算符 3,算术运算符 +:正号,加,遇到字符串变成链接符号 -:负号,减 *:...
  • 使用异或运算符实现两个变量交换

    千次阅读 2019-04-06 18:10:06
    通常的交换两个变量a,b的过程为...采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量:     a = a ^ b;     b = a ^ b;   ...
  • 异或 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。 异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0 ^ 0 = 0,1 ^ 0 = 1...
  • 0.开头 ...《Java-随便写写-实现变量值交换和随机数的生成》只写了两种基本的方法;...这里补充异或实现变量交换的方法。 1.先结论 直接上代码: public class ExchangeValue { public static void main(String...
  • 版权声明:转载请注明作者(独孤...#异或交换律、结合律 x=a^b y=x^b#相当于y=a^b^b=a^(b^b)=a z=x^y#相当于z=a^b^a=b^(a^a)=b 这个异或,我想了好一会才想明白。   独孤尚良dugushangliang——著  
  • 异或交换变量

    2015-10-12 15:49:00
    采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量:  a = a ^ b;  b = a ^ b;  a = a ^ b; 这个交换两个变量而无需借助第3个临时变量过程,其实现主要是...
  • 使用异或实现两个数的交换

    千次阅读 2014-08-07 15:22:00
    实例:将数组的头尾两端依次对调(采用异或的方法实现两数的交换,不需要临时变量
  • 主要介绍了Java中使用异或语句实现两个变量的互换,本文直接给出代码实例以及运行结果,需要的朋友可以参考下
  • 今天在看C语言的位运算时,看到了如下交换a,b两值的方法: a = a^b; b = a^b; a = a^b; 后来想想,真是太神奇了!其实,我们首先知道,对于任意的x满足: x^x == 0; ...
  • 异或交换变量内容

    2013-01-01 20:37:35
    以前在《C语言的495个问题》中看到 ...的语句即可实现a,b变量交换了 #include "stdio.h" main() {  int a;  int b;  a=1;  b=2;  a^=b^=a^=b;  printf("a:%d b=%d\n",a,b); }
  • package EXERCISE; public class Change { //变量互换。使用异或运算,不借助第三变量 public static void main(String[] args) { int a=2;//10 int b=3;//11 a=a^b;//01=10^11 b=a^b...
  • 前不久在刷题过程中,碰到了使用异或实现swap的操作,通过a^=b^=a^=b;实现交换a,b。这是一种不需要第三个变量来达到两个整数交换的方法。于是我把这个swap方法放到了我写的quickSort算法代码中,替代了原有的swap...
  • 使用异或交换两个变量是低效的异或交换C 语言对策C++ 语言对策 异或交换 我们通常会遇到这样的面试题: 请编写一个函数,交换 a、b 两个变量,且不能使用额外的临时变量。 通常答案是这样的: #define SWAP(a,b) ...
  • 前面我们谈到了,可用通过异或运算交换两个数,而不需要任何的中间变量。 如下面: void exchange(int&a,int&b) { a ^=b; b ^=a; a ^=b; } 然而,这里面却存在着一个非常隐蔽的陷阱。通常我们...
  • ^异或实现两数交换

    千次阅读 2018-12-26 08:41:34
    转载于:... ... 通常我们实现两数交换不得不引入一个临时变量temp作为媒介,而使用异或运算也能实现同样的功能,甚至无需使用临时变量。 这是一个通常的做法: ...
  • java 使用异或运算交换

    千次阅读 2017-10-18 15:37:25
    java中的数据类型分为: 图片出自:Java四类八种数据类型 对于整数类型:byte,short,int,long (1) 可以使用异或运算,...对于浮点类型,不能使用异或运算来交换,可以引入一个缓存变量实现交换 例子: package Ct
  • 我们知道,在排序算法中经常会需要交换序列中的两个变量,常见有两种方法: 1.借助第三个临时变量 // 交换 int temp = array[i]; array[i] = array[index]; array[index] = temp; 2.借助异或运算的特性 ...
  • 算法目的:用位运算符中的异或实现两数交换,而不借助中间变量。 核心思想:a对b异或,得到的值再与a或者b异或,会得到b或者a的值。 算法: 定义两个变量a、b; a = a ^ b; //得到一个a^b的中间数并赋值给a ...
  • 异或运算符 “ ^ ” 如果使用对象为整数型,则以二进制表示排他。如下 int a = 5; //0101 int b = 10; //1010 a = a ^ b; // a=15 1111 Console.WriteLine(a); b = b ^ a; // b=5 0101 Console.WriteLine(b);...
  • 如果实现 两个变量交换 不借助中间变量如何交换呢 原理:异或运算 相同位为0 不同位为1 a: 0000.....00001010 b: 0000.....00000001 a^b: 0000.....00001011 a^b 这个结果相当于一面镜子 通过a可以反射...
  • Java中^详解以及异或交换整型变量 首先声明!上一遍文章有很多漏洞,主要是第一次写,打错了不少东西。比如说在int取值范围的表格中最小取值十进制没有加负号。下次注意。 今天我想讲一下^符号。还是因为我们学校是...
  • 使用异或运算实现两数交换

    万次阅读 多人点赞 2016-01-01 23:51:24
    三种方法实现两数互换

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,207
精华内容 5,682
关键字:

使用异或实现变量交换