思维革命:交换两个变量的值

本txt致力于展示位运算的美丽技巧的巧妙应用。利用了位运算之异或运算的一个美丽的特性。自己每次都要睁大了眼睛看哦。呵呵。当然了,这个是从基本做起来的。请认真explore it 吧。。。

看代码例子:

class BitOperation {public static void main(String[] args) {        System.out.println("需求:交换两个变量的值");

int m = 4, n = 9;        System.out.println("Before our exchange:" + " m=" + m + " n=" + n);

        System.out.println("-----------第一种方法---------------");int temp;        temp = m;        m = n;        n = temp;        System.out.println("After our exchange:" + " m=" + m + " n=" + n);

        m = 4;        n = 9;        System.out.println("-----------第二种方法(不使用临时变量来实现)---------------");        n = n + m;        m = n - m;        n = n - m;        System.out.println("After our exchange:" + " m=" + m + " n=" + n);

        m = 4;        n = 9;        System.out.println("-----------第三种方法(也是不使用临时变量来实现)---------------");        n = n ^ m;        m = n ^ m;        n = n ^ m;        System.out.println("After our exchange:" + " m=" + m + " n=" + n);

    }}

具体分析:
>局部:第一点:(第一种方法)自己以前,就只是知道,每次交换位置的时候,就搞个临时变量,然后弄个跟三角形的关系似的东东就换过来了。
评评:此种思想是平时最容易想到的,也是实际开放中真正会去应用到的。因为后面两点都不好想到。也就是说,这个是传统思维,也是直接思维。

第二点:(第二种方法)求和,再分别去减下彼此。思路不错。
评评:虽然可以实现功能,但是,不要忽略了它的略根性,即可能带来的新的问题--int类型数据范围是比较大的,最大值是2的31此方-1,那么,
n = n + m这一步操作,当n和m非常大的时候,可能损失精度。是不行的。

第三点:(第三种方法)采用二进制位异或操作法。直接进行交换了。厉害呀。
评评:这个思路好厉害。利用了知识点,也是异或的特性:一个数a去异或另外一个数字两次,结果还是这个数a。佩服这个东东。这个评价给最高分。但是,
实际中,并不好想到。所以,要知道,最实用的还是第一点的第一种方法。(建议:观察这个的特点,很好背住哦。不过,还是理解万岁呀。)

>全局:
注意,在每一次的使用新方法进行数据交换之前,必须数据重新置位到初始化状态呀。否则,你就等着看错误结果吧。这个注意呀。

问题分析和解决时间:2011/12/04/4:40(算法篇)

posted on 2011-12-09 17:26 评评 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/yxcb/archive/2011/12/09/2276939.html

思维革命:交换两个变量的值相关推荐

  1. 不用临时变量,交换两个变量的值

    不用临时变量,交换两个变量的值 a=a^b;     b=a^b;     a=a^b; 或者   a=a+b;     b=a-b;     a=a-b;

  2. 【剑指offer】不使用新变量,交换两个变量的值,C++实现

    # 题目 不使用新变量,交换两个变量的值. # 思路 方法一:使用加减法操作,交换两个变量的值. A = A+B B = A-B A = A-B 方法二:使用异或运算,交换两个变量的值 A = A^B ...

  3. PHP中不用第三个变量交换两个变量的值

    相信大家在PHP面试或者学习中经常会遇到这个问题就是"不用第三个变量来交换两个变量的值",今天正对这个问题来讨论一下: 第一种方法:首先会想到的 这种方法简单可行,顺利的交换了两个 ...

  4. C语言中的关键字,变量的定义,变量的命名规则,交换两个变量的值,驼峰命名法【 C语言变量名命名法则】

    C语言结构 C语言中的关键字 变量 变量的定义 变量的命名规则 交换两个变量的值 驼峰命名法 C语言结构 上图中我们可以看到最外层是程序,内部是所有的构成,我们从最里面开始说明. 当我们用计算机语言来 ...

  5. Python中有几种办法交换两个变量的值?

    交换两个变量的值方法,这个面试题如果只写一种当然很简单,没什么可以说的.今天这个面试是问大家有几种办法来实现交换两个变量的值 .在没开始看具体答案前,你可以先想想看 . 下面分别来说说这几种方法: 1 ...

  6. 交换两个变量ab的值PHP,由[交换两个变量的值问题]理解程序的时空复杂度

    由一个编程经典问题,交换两个变量的值入手,理解程序的时空复杂度(以下均使用PHP代码演示问题的解决方法)解决问题的方法一:1.方法文字描述:使用一个中间变量temp,实现两个变量值的互换2.实现的具体 ...

  7. 前端学习(623):交换两个变量的值

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  8. 用html5交换两个变量的值,Python判断两个对象相等的原理 python交换两个变量的值为什么不用中间变量...

    python语言设计一个类代表花,其中含2个对象属性,2class flower: def __init__ (self, name, shape): self.name = name self.sh ...

  9. 在java中的交换方法有哪些_java中交换两个变量的值有哪几种方法,交换两个变量a和b的值...

    java中交换两个变量的值有哪几种方法在Java中,有哪些方法可以交换两个变量的值, 方法: 1.定义临时变量 2.没有必要定义临时变量 3.使用位运算符 (学习视频分享:java课程) 代码示例: ...

最新文章

  1. 静态链接库与动态链接库 (二)动态链接库的编译与使用
  2. 如何查看oracle数据库集群哪个节点正在使用,windows oracle 怎么查看集群状态
  3. 文青工程师陈盛 — 程序员+文青是怎样一种体验
  4. 初学java之常用组件
  5. Nacos(十一)之NacosSync 介绍
  6. 模为2的逆元是什么_两种求模m逆元的方法
  7. 怎么用计算机改变声音的音调,调音台使用教程大全
  8. silverlight中DataGrid错误:data未定义
  9. UML基础与应用系列文章汇总
  10. 6to4隧道实验(华为设备)
  11. TurboFan-Sea of Nodes概念讲解
  12. 智慧校园网络机房建设解决方案2.0
  13. python读取tif图片_在Python中读取TIFF图像元数据
  14. java实现手机扫描二维码下载功能
  15. 网站如何实现短信验证码功能?
  16. 论文阅读:ThinLTO: Scalable and Incremental LTO
  17. 基于NT98530的多目VR摄像机方案,多sensor同步,多sensor防抖,PTP校时,实景SLAM数字孪生的最佳搭档。
  18. 计算机英语短文的总结,描写计算机的英语短文
  19. 心累,网站被盗刷 1.7T 流量
  20. pdf编辑阅读器PDF Reader Pro for Mac

热门文章

  1. CentOS配置ssh无密码登录
  2. jquery获取表格中特定列
  3. 前端开发中的性能那点事(三)php的opcode缓存
  4. 比较两个数组,输出不重复的数组
  5. __asm__ __volatile__内嵌汇编用法简述
  6. 职场中,要善于交换利益
  7. Js中Currying的应用
  8. Git常用指令——持续补充中
  9. 远程控制 开源 鳄梨_开发人员关系与鳄梨的共同点
  10. 红帽补丁安装的方法_为什么红帽采取“上游优先”的方法