不用中间变量交换 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
莱怪斯娜: 不用中间变量交换两个变量的值: 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的值??
莱怪斯娜: <% a=234 b=345 a=a&","&b b=split(a,",")(0) a=split(a,",")(1) %>
普宁市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的值*/