会飞的鱼

2020
Godam
首页 » 学习笔记 » C语言数值交换

C语言数值交换

第4章 组合电路.pdf如何不使用第三个变量直接交换两者数值?除了四则运算之外下面给出两种思路:

1.使用异或的方法来进行交换,这种方法主要利用了异或的特性a^b的值先保存到a,因为a^b^b=a所以可以顺利完成交换。下面是程序代码:

#include <stdio.h>
 
int main()
{
    int a = 4;
    int b = 5;
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    printf("\n");
 
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
 
    printf("----------------------------------下面是结果------------------------------------\n");
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    return 0;
}


2.使用移位的方法,把原来的int类型的a,把a的值拆分成高16位和低16位,相当于多了16位的暂存空间可以周转。下面是一段代码:

#include <stdio.h>
 
int main()
{
    int a = 32123;
    int b = 12345;
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    printf("\n");
 
    a <<= 16;
    a |= b;
    b = a >> 16;
    a = a & 0xffff;
 
    printf("----------------------------------下面是结果------------------------------------\n");
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    return 0;
}


 

注意*

这时候我们要思考了,对于四则运算交换数值,要注意数值越界问题,比如对于int型变量却输入一个非常大的数值这时候进行交换一定会出现问题。本文中的方法2也是如此如果数值超过16位也会出现问题。但方法一却是完美的,所以推荐大家使用方法一完成此类问题。

 

文章转自* https://blog.csdn.net/bluestar2009/article/details/79694227?utm_source=app

文章如无特别注明均为原创! 作者: 果果, 转载或复制请以 超链接形式 并注明出处 GODAM|博客|godam
原文地址《 C语言数值交换》发布于2019-9-26

分享到:
打赏

评论

游客

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册

sitemap