不用中间变量交换 a ,b(三种方法)

作者&投稿:伏林 (若有异议请与网页底部的电邮联系)
不用中间变量交换a和b的值,有哪些方法?~

不行。。 首先 a=b,将b赋值给a,此时a的值已经变为b的值, (a=b)*0为0,再加上a(此时a的值已经是b了),所以此语句的结果什么都没做。。比如a = 5,b=4.最后结果是4.
一种方法是 a = a+b; b=a-b; a=a-b;此时a,b值互换。。。

<%
a=234
b=345
a=a&","&b
b=split(a,",")(0)
a=split(a,",")(1)
%>

不用中间变量交换两个变量的值:

1、加减法:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失。

a = a + b;

b = a - b;

a = a - b;

2、异或法:可以完成对整型变量的交换,对于浮点型变量它无法完成交换。

a = a^b;

b = a^b;

a = a^b;

3、乘除法:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。而且乘除法比加减法要多一条约束:b必不为0。

a = a * b

b = a / b

a = a / b

其中加减,乘除容易越界,用位运算异或效率最高,且不会越界。

使用位运算交换两个数,是利用了异或的自反性: a^b^b=a^0=a;

扩展资料:

异或,英文为exclusive OR,缩写成xor

异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:

a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

异或略称为XOR、EOR、EX-OR

程序中有三种演算子:XOR、xor、⊕。

使用方法如下

z = x ⊕ y

z = x xor y

参考资料:百度百科-异或



1、加减法:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失

a = a + b;

b = a - b;

a = a - b;

2、异或法:可以完成对整型变量的交换,对于浮点型变量它无法完成交换。

a = a^b;

b = a^b;

a = a^b;

3、乘除法:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。而且乘除法比加减法要多一条约束:b必不为0。

a = a * b

b = a / b

a = a / b

扩展资料:

变数或变量,是指没有固定的值,可以改变的数。变量以非数字的符号来表达,一般用拉丁字母。变量是常数的相反。变量的用处在于能一般化描述指令的方式。结果只能使用真实的值,指令只能应用于某些情况下。变量能够作为某特定种类的值中任何一个的保留器。

参考资料:百度百科:变量



1、加减法:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失

a = a + b;

b = a - b;

a = a - b;

2、异或法:可以完成对整型变量的交换,对于浮点型变量它无法完成交换。

a = a^b;

b = a^b;

a = a^b;

3、乘除法:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。而且乘除法比加减法要多一条约束:b必不为0。

a = a * b

b = a / b

a = a / b

例如:

#include<stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    //方法一:
    a = a + b;
    b = a - b;
    a = a - b;
    //方法二:
    a = a * b;
    b = a / b;
    a = a / b;
    //方法三:
    a = a^b;
    b = a^b;
    a = a^b;
    printf("a = %d,b =%d
",a,b);
    return 0;
}


a = a - b
b = a + b
a = b - a

a = a * b
b = a / b
a = a / b


普宁市18377352331: 不用中间变量交换 a ,b(三种方法) -
莱怪斯娜: 不用中间变量交换两个变量的值: 1、加减法:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失. a = a + b; b = a - b; a = a - b; 2、异或法:可以完成对整型变量的交换,对于浮点型变量它无法完成交换....

普宁市18377352331: 用至少2种方法实现不使用中间变量交换a b 的值 并说明各种方法的局限性 -
莱怪斯娜: c++#include <stdio.h>#define swap(x,y) x^=y^=x^=y void Swap(int &a,int &b) { a = a + b; b = a - b; a = a - b; } int main() { int a,b; printf("输入第1个数\n"); scanf("%d",&a); printf("输入第2个数\n"); scanf("%d",&b); swap(a,b); printf(...

普宁市18377352331: 如何不使用额外变量来交换两变量 -
莱怪斯娜: 对变量a,助中间变量进行,如下:int a,b,temp; a = 1; b = 2; temp = a; a = b; b = temp; 经过上述操作,就可以将a,b的进行交换,此时a为2,b为1.

普宁市18377352331: Java 不用中间变量,实现int a,b的交换
莱怪斯娜: 例如a=1,b=2 b=a+b;这时a=1,b=3 a=b-a;这时a=2,b=3 b=b-a;这时a=2,b=1交换了

普宁市18377352331: 在不用第三方参数的情况下,交换两个参数的值(3种方法).比较三种方法中,哪一种更好,为什么? -
莱怪斯娜: swap a with b int a; int b1.a = a + b; b = a - b; a = a - b;2.a=a^b; b=a^b; a=a^b;3.a=a*b; b=a/b; a=a/b; 其他运算符号也可以 不止3种.2最好.因为位运算比其他运算快

普宁市18377352331: 如何不用中间变量,交换a、b的值?
莱怪斯娜: &lt;% a=234 b=345 a=a&amp;","&amp;b b=split(a,",")(0) a=split(a,",")(1) %&gt;

普宁市18377352331: 用C语言来实现,不通过中间变量,交换两个整形变量的值? -
莱怪斯娜: #include<stdio.h> int main() {int a=5,b=6;a^=b;b^=a;a^=b;printf("a=%d,b=%d",a,b); } 提示:利用异或的原理——因为任何数字在计算机中都是二进制,因此第一次和第二次异或使得a,b两个数字各个位数二进制互换位置(互相交换),为防止两个数字是相同情况,因此第三次再次异或.我拿0,1举例子: 假设: a = 1, b= 1 a^b = 0b^a = 1 a^=b =1

普宁市18377352331: 用C语言写一个程序,题目是这样的:互换两个变量的值,转换过程中不能用到中间变量,如何写? -
莱怪斯娜: 可以使用异或操作,结合指针就可以通用了 void axb(int* a,int* b) { *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }

普宁市18377352331: C语言:如何不通过中间变量交换两个数的值 -
莱怪斯娜: #includeint main() { int a = 1; int b = 2; printf("a=%d,b=%d\n",a,b); a = a+b; b = a-b; a = a-b; printf("a=%d,b=%d\n",a,b); return 1; }

普宁市18377352331: 在VC++中如何不通过中间变量交换两个变量的值? -
莱怪斯娜: 可以这样,比如要交换a和b的值 a=a+b;/*a变为a与b的和*/ b=a-b;/*b变为a与b的和减去b,就是a*/ a=a-b;/*a变为a与b的和减去a(因为现在b的值是原来a的值),就是原来b的值*/

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网