`
东边日出西边雨
  • 浏览: 258442 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

交换两个数字的值(不用临时变量)

 
阅读更多

c语言, 有两个int型的数字,怎么样不用临时变量交换两个数字的值?

 

用如下方法即可:

 

int a = 10;
int b = 20;

a = a^b;
b = a^b;
a = a^b;

printf("%d %d\n", a, b);

 

result:

   20 10

 

这是为什么呢?

 

首先得理解“异或操作”, 异或是一种位操作,相同的位异或结果是0, 不同的位异或结果为1.

在第一个 a = a^b后,a的值其实保存了a, b两个变量之间的比较结果,也可以理解为a, b两变量的差异。

这时根据b和保存了差异的变量,可以推导出最初的a变量的值, 就是  b = a^b. 然后再类似的可以推导出b的值。

 

整个过程如下图:

 

                                             10                              20

        开始                              a                                b

第一次运算 a=a^b                                   a              b

第二次运算 b=a^b                 b                a

第三次运算 a=a^b                 b                                a

 

 

分享到:
评论

相关推荐

    c-------------------lab------------------assignment

    问题3 WAP使用临时变量和不使用临时变量来交换两个数字。没有临时变量临时变量作业2问题1 WAP输入一个十进制数(以10为基数)并显示其十六进制和八进制等效项。问题2 WAP检查给定数字是偶数还是奇数。 a)使用if-...

    跟我学Java面向对象程序设计技术及应用——应用冒泡排序算法实现数组元素排序的Java程序实现示例.pdf

    而如果两 个元素的值相等、但元素在位置上并没有相邻,那么即使通过前面的两两交换把两个元素相 邻起来,这时候也不会对它们进行交换。所以相同元素值的两个元素的前后顺序在此算法中 并没有被改变,故冒泡排序是一...

    700个批处理打包下载.rar

    交换两个变量的值而不使用临时变量.bat 交换两个变量的值而不使用临时变量.cmd 人民币大小写互转程序.cmd 人民币金额小写转大写.cmd 今天访问过的程序文件所在目录.cmd 以文件夹名为名建立文本文件.cmd 使用WMI别名...

    你必须知道的495个C语言问题

    它不需要临时变量就可以交换a和b的值。 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副作用?就算括号不行,操作符优先级是否能够控制计算顺序呢? 3.6 可是&&和||操作符呢?我看到过类似while...

    世界500强面试题.pdf

    1.5.6. 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数 ....... 116 1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调...

    《你必须知道的495个C语言问题》

    它不需要临时变量就可以交换a和b的值。 34 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副作用?就算括号不行,操作符优先级是否能够控制计算顺序呢? 35  3.6 可是&&和||操作符呢?我看到过...

    C语言FAQ 常见问题列表

    o 4.4 这是个巧妙的表达式: a ^= b ^= a ^= b 它不需要临时变量就可以交换 a 和 b 的值。 o 4.5 我可否用括号来强制执行我所需要的计算顺序? o 4.6 可是 && 和 || 运算符呢?我看到过类似 while((c = getchar())...

    Linux高级bash编程

    两个指定值之间的随机数 9-27. 使用随机数来摇一个骰子 9-28. 重新分配随机数种子 9-29. 使用awk产生伪随机数 9-30. C风格的变量处理 10-1. 循环的一个简单例子 10-2. 每个[list]元素带两个参数的for循环 10-3. ...

    Advanced Bash-Scripting Guide <>

    两个指定值之间的随机数 9-27. 使用随机数来摇一个骰子 9-28. 重新分配随机数种子 9-29. 使用awk 产生伪随机数 9-30. C 风格的变量处理 10-1. 循环的一个简单例子 10-2. 每个[list]元素带两个参数的for 循环 10-3. ...

    浅谈python常用程序算法

    过程:对相邻的两个元素进行比较,对不符合要求的数据进行交换,最后达到数据有序的过程。 规律: 1.冒泡排序的趟数时固定的:n-1 2.冒泡排序比较的次数时固定的:n*(n-1)/2 3.冒泡排序交换的次数时不固定的:但是...

    你必须知道的495个C语言问题.pdf

    它不需要临时变量就可以交换a和b的值。 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副作用?就算括号不行,操作符优先级是否能够控制计算顺序呢? 3.6 可是&&和||操作符呢?我看到过类似while((c ...

    大量批处理实用程序例程

    交换两个变量的值而不使用临时变量.cmd 修改IP跟电脑名.bat 全盘删除所有文件夹下的_desktop.ini.bat 删除大小和类型一样的文件.bat 删除所有分区的默认共享.bat 判断光驱里有无光盘.bat 判断分区格式.bat 加密代码....

    你必须知道的495个C语言问题(PDF)

    3.4 这是个巧妙的表达式: a ˆ= b ˆ= a ˆ= b 它不需要临时变量就可 以交换a 和b 的值。. . . . . . . . . . . . . . . . . . . . . . . . . 14 3.5 我可否用括号来强制执行我所需要的计算顺序? . . . . . . . . ....

    操作系统精髓与设计原理答案

    这两个步骤是并行完成的。 c. MBR中的值被送入指令寄存器IR中。 2. a. 指令寄存器IR中的地址部分(940)被送入MAR中。 b. 地址940中的值被送入MBR中。 c. MBR中的值被送入AC中。 3. a. PC中的值(301)被送入...

    c# 加密和解密相关代码

    //定义两个值类型变量 if (int.TryParse(txt_Num.Text, out P_int_Num) //判断输入是否是数值 && int.TryParse(txt_Key.Text, out P_int_Key)) { txt_Encrypt.Text = (P_int_Num ^ P_int_Key).ToString(); //加密...

    c语言经典案例

    实例182 使用指针交换两个数组 中的最大值 257 实例183 输出二维数组有关值 259 实例184 输出二维数组任一行 任一列值 260 实例185 将若干字符串按照字母 顺序输出 262 实例186 用指向函数的指针比较大小 263 实例...

Global site tag (gtag.js) - Google Analytics