【c语言】写一个宏定义,实现的功能是将一个int型的数的奇偶位互换

//  写一个宏定义,实现的功能是将一个int型的数的奇偶位互换,例如6的二进制为0110,第一位与第二位互换,
//  第三位与第四位互换,得到1001,输出应该为9

#include <stdio.h>
//  取出奇数位与偶数位,奇数位左移1位,偶数位一位,相加或者相或
#define EXCHANGE(num) (((0x55555555 & num) << 1) + ((0xaaaaaaaa & num) >> 1))

int main()
{
	printf("%u\n", EXCHANGE(2));
	printf("%u\n", EXCHANGE(3));
	printf("%u\n", EXCHANGE(10));
	printf("%u\n", EXCHANGE(5));
	return 0;
}

<img src="http://img.blog.csdn.net/20150629213105535?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-02 02:29:04

【c语言】写一个宏定义,实现的功能是将一个int型的数的奇偶位互换的相关文章

C语言笔记之宏定义

(一)符号常量 宏定义是C语言中的一种替换策略,即使用预处理命令 #define 将一串(冗长的)文本与某个名字(称为宏)等同起来,然后就可以在源代码中批量使用宏.在预处理阶段再将源代码中的宏替换为原来的文本.例如,在源代码中: #define PI 3.14 那么在接下来的代码中,需要写3.14的地方可以直接用PI代替.预处理的时候,PI又全部变回3.14. 这样换来换去的有啥好处呢?万一代码的中的3.14需要全部改为3.1415926,那么如果没有刚才的宏定义,就只能挨个去修改:但是有了宏定

C 语言 之 预处理-------- 宏定义

1 概述 使用过以"#"号开头的预处理命令.如包含命令# include,宏定义命令# define等.在源程序中这些命令都放在函数之外, 而且一般都放在源文件的前面,它们称为预处理部分. 所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理是C语言的一个重要功能, 它由预处理程序负责完成.当对一个源文件进行编译时, 系统将自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译. C语言提供了多种预处理功能,如宏定义.文件包含. 条

黑马程序员------C 语言学习笔记---C语言中的宏定义

1.5    C语言程序的运行过程 01 源程序:由高级语言或汇编语言编写,C语言源程序的扩展名为.C 02 目标程序:源程序经“编译程序”翻译所得的二进制代码为目标程序,其扩展名为.obj 03 可执行程序:目标程序与库函数连接,形成可执行程序,.out #include <stdio.h> int main() { #define PI 3.14 double r,len,area; printf("请输入半径:\n"); // 提示用户输入半径 scanf("

用C语言写一个“事件”的模拟程序

源:用C语言写一个“事件”的模拟程序 Example.c //定义一个函数指针 func int (*func) (void); //调用该函数相当于触发了事件. //该事件触发后,会检查函数指针func是否为NULL,如果不为NULL,说明该指针已被赋值(相当于该事件被注册). //如果事件已被注册,则执行之. void fireTheEvent() { if(func != NULL) { func(); } } void registerTheEvent(int (*function) (

C语言学习笔记--C语言中的宏定义

1. C 语言中的宏定义 (1)#define 是预处理器处理的单元实体之一(因此,预处理器只是简单的进行替换,并不(2)#define 定义的宏可以出现在程序的任意位置(包括函数体的内部)(3)#define 定义之后的代码都可以使用这个宏 2. 定义宏常量 (1)#define 定义的宏常量可以直接使用(2)#define 定义的宏常量本质为字面量 3. 宏定义表达式 (1)#define 表达式的使用类似函数调用(2)#define 表达式可以比函数更强大(3)#define 表达式比函数

python递归练习:生成一个n级深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},写一个函数定义n级

结果#encoding = utf-8#题目:#生成一个n级深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},写一个函数定义n级a=[1,2,3,4,5,6] def fun(n,i=0,dict1={}): if i ==n-1: dict1[a[i]] = a[i+1:] if i < n-1: dict1[a[i]] = fun(n,i+1,dict1={}) #print "dict1:",dict1 return

c语言中的宏定义的学习体会

在学习stm32的过程中遇到关于宏定义的问题,所以,写出来大家一起学习一下 问题出处: 其中\是语言中的转义字符,用来连接上下文,因为宏定义只能是一个串,而当你的串过长(超过一行的时候)时,就需要换行了,此时就需要\来连接上下文. 下面是成熟软件中常用到的宏定义: 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植. typedef 

一个宏定义引发的问题

问题1:对与buffer宏定义的理解 一些得到的基本结论:int型数据占有一个字的空间,char型数据占有一个字节的空间,并且char数据类型的定义是为ASCII字符表量身定制的 对与buffer的理解: #define buffer ((char*) * (int far*)0x200) 首先,复习对与基本宏定义的知识:对于# define pi (3.14)即pi = 3.14,在此我们首先应该认识到,最外面的括号仅仅是一个结构,来说明里面的内容是一个整体. 下面来研究buffer究竟是什么

【C语言总结】宏定义,预处理

宏定义 简单宏 格式:#define 标示符 替换列表 #define N 100 int a[N];//N就是100 带参数的宏 格式:#define 标示符(x1, x2, x3,--xn) 替换列表 #define MAX(x, y) ((x) > (y) ? (x) : (y)) 注意:程序编译的时候会把大写的标示符替换成原来的表达式,所以编译时候程序会增大. 优点或者缺点 优点 ①程序可能会稍微快些 ②宏会更通用 缺点 ①编译后代码通常会变大 ②无法用指针指向一个宏 ③宏可能会不止一次