我是靠谱客的博主 精明铃铛,最近开发中收集的这篇文章主要介绍C语言使用宏_交换一个数的奇数位和偶数位 求两个数中的最大值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、写一个宏可以将一个数字的奇数位和偶数位交换。

刚看到这个题的时候感觉我也觉得这个题很怪,让交换一个数的奇数位和偶数位,感觉完全不知道该从何处下手,然后通过在网上查了一下才知道这个题要交换的不是十进制数,而是十进制对应的二进制数的奇数位和偶数位。代码如下:

#include <stdio.h>
#include <stdlib.h>
# define change(a) (((a)&0xAAAAAAAA)>>1)|(((a)&0x55555555)<<1)
int main()
{
int a = 0;
scanf ("%d",&a);
printf ("转换前:%dn",a);
printf ("转换后:%dn",change(a));
system ("pause");
return 0;
}
/*
5
转换前:5
转换后:10
请按任意键继续. . .
*/

其中0xAAAAAAAA 和 0x55555555都是十六进制数,对应的二进制分别是1010 1010 1010 1010 1010 1010 1010 1010 和 101 0101 0101 0101 0101 0101 0101 0101,a&0xAAAAAAAA可以得到a二进制中的偶数位,右移一位就把偶数位的数移到了奇数位上,右移时失去的以为是奇数位,所以没有影响;同理:a&0x55555555得到a的奇数位,左移一位就把奇数位移到偶数位上,左移一位时丢掉的一位是偶数位,所以也没有影响。最后再把得到的两个数组合在一起就可以了。下图是输入10,转换后变成5的大概过程:
这里写图片描述

2、用宏定义求最大值

#include <stdio.h>
#include <stdlib.h>
# define Max(a,b) (a)>(b)?(a):(b)
int main()
{
int a = 0, b = 0;
printf ("请输入一个数:n");
scanf ("%d%d", &a, &b);
printf ("%d%d 中最大是数是:%dn",a, b, Max (a,b));
system ("pause");
return 0;
}
/*
运行结果:
请输入一个数:
10
20
1020 中最大是数是:20
请按任意键继续. . .
*/

注意:使用宏时一般情况下不要在后面加分号,如果加了分号像这种:# define Max(a,b) (a)>(b)?(a):(b);,它会吧(a)>(b)?(a):(b);看成一个整体

最后

以上就是精明铃铛为你收集整理的C语言使用宏_交换一个数的奇数位和偶数位 求两个数中的最大值的全部内容,希望文章能够帮你解决C语言使用宏_交换一个数的奇数位和偶数位 求两个数中的最大值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部