不引进第三变量交换两个整形变量的值

C语言中我们常见的交换两个整形变量值的方法是引进一个第三变量

不引进第三变量交换两个整形变量的值_第1张图片

但有时题目限制我们引进第三变量,这时就得思考其方法

我们知道整形变量间可以做加减乘除运算,那我们是否可以对两个整形变量进行运算来交换他们的值呢,答案是肯定的,下面展示的是通过加减法运算交换两整形变量的方法

不引进第三变量交换两个整形变量的值_第2张图片

但因为int占4字节32位,根据二进制编码的规则,INT_MAX = 2^31-1,INT_MIN= -2^31.C/C++中,所有超过该限值的数,都会出现溢出,若a或b的值本身在整形范围内,而a+b的值超出这个范围,那么就会出现溢出,使得这个算法不够完美,下面介绍一种通过异或操作实现两个整形变量交换的方法

*异或运算符是指: 参与运算的两个值的二进制,如果两个相应位相同,则结果为0,否则为1。即:1^0=0000001^00000000=00000001这里给出异或的几个常用结论(①.a^a=0 ②.0^a=a ③.异或符合交换律)

不引进第三变量交换两个整形变量的值_第3张图片

你可能感兴趣的:(c语言)