写一个宏,可以将一个整数字的奇数位和偶数位交换

  • 1.过程
  • 2.预处理
  • 3.宏和函数
  • 4.交换奇偶位

1.过程

(1)组成一个程序的每个源文件通过编译过程分别转换成目标代码
(2)每个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序。
(3)链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中。

2.预处理

(1)预处理符号
FILE //进行编译的源文件
LINE //文件当前的行号
DATE //文件被编译的日期
TIME //文件被编译的时间
STDC //如果编译器遵循ANSIC,其值为1,否则未定义
(2)#和##的作用?
使用#,可以把一个宏参数变成对应的字符串。
使用##,把位于它两边的符号合成一个符号,它允许宏定义从分离的文本片段创建标识符。

3.宏和函数

1.宏的特点:
(1)宏执行简单的运算时,宏比函数在程序的规模和速度方面更生一筹。
(2)宏是类型无关的。
2.宏的缺点:
(1)每次使用宏的时候,一份宏定义的代码将插入到程序中,除非宏比较短,否则可能大幅度增加程序的长度。
(2)宏是没法调试的。
(3)宏由于类型无关,也就不够严谨。
(4)宏可能会带来运算符优先级的问题,导致程序容易出现错。
3.#undef
这条指令用于移除一个宏定义。
4.其他的预处理指令
#error
#pragma
#line

4.交换奇偶位

(1)思路
1.需要先分别拿出奇偶位。
2.奇数位拿出,那就是要&上010101010101……,对应十六进制分别是555……
3.偶数位拿出,就是要&上101010101010……,对应十六进制分别是aaa……,一般我们默认是32位整数
4.奇数位左移一位就到了偶数位上,偶数位右移一位就到了奇数位上
5.最后将移位之后的两个数字或运算,就完成了交换。
(2)代码编写

#define SwapIntBit(n) (((n) & 0x55555555) << 1 | ((n) & 0xaaaaaaaa) >> 1)

写一个宏,可以将一个整数字的奇数位和偶数位交换相关推荐

  1. C语言中利用宏,实现一个整数的奇数位和偶数位交换,以及计算结构体中某变量相对于首地址的偏移

    C语言中的自定义宏 自定义宏,令其实现所需功能 1.写一个宏,可以将一个整数字的奇数位和偶数位交换. 2.写一个宏,计算结构体中某变量相对于首地址的偏移. 具体思路1: 首先取出当前数的奇数部分和偶数 ...

  2. 【C语言】用宏实现将一个整数的二进制位的奇数位和偶数位交换

    题目名称 :写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换. 解题思路 : 随便给出一个32个bit位的二进制数字,观察发现,: 我们可以将其奇数位的二进制位都保留,然后偶数位制成0,再右移一 ...

  3. 写一个使两个整数进行交换的方法(不能使用临时变量) 【前端每日一题-27】...

    写一个使两个整数进行交换的方法(不能使用临时变量) 这道题是一个比较有意思的题,记录于此. var a=10; var b=20;...不用临时变量让a和b交换console.log(a); cons ...

  4. 写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出

    写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出 思路:所谓复制到另一个字符串中,就是使a,b数组中元素一一对应,因为字符串结束的标志是\0,所以最后要赋值\0. #include&l ...

  5. 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...

  6. c#输入三个数选出最大的_C#写一个输入三个整数,按大到小顺序输出的小程序...

    满意答案 pf48154968 2013.07.05 采纳率:52%    等级:12 已帮助:9321人 int[] arr = new int[3]; for (int i = 0; i < ...

  7. 写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。

    方法一(输出的字符前后无空格): #include <stdio.h> #include <string.h>void ycopy(char x[], char y[]); / ...

  8. 写一个新年贺词。50字

    新的一年来临了,祝福你在新的一年里: 愿你拥有健康的身体,快乐的心情,幸福的家庭,成功的事业,美满的人生. 新年快乐,万事如意!

  9. 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。 请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。如下实例。示例 :输入: 1->2->3->4-

    #include<stdio.h> #include<stdlib.h>struct LB {int data;struct LB *next; };struct LB *Cr ...

最新文章

  1. 一个SAP老司机多年的中间件使用心得
  2. 常见Orcale报错问题解决办法
  3. 八年溯源,如何巧搭区块链
  4. 电脑用linux命令大全,电脑操作时常用的一些Linux命令
  5. apache htpasswd.exe创建密码
  6. tomcat给android发图片,一步一步学会http获取tomcat服务端的图片,在android客户端显示...
  7. ShaderLab学习总结
  8. iOS底层探索之多线程(十六)——锁分析(NSLock、NSCondtion、NSRecursiveLock、NSCondition)
  9. AndroidStudio关联GitHub
  10. Atitit smp prj 项目简化方法总结 目录 第一章 俩大原则准则 1 第一节 极简主义原则 + 自由主义原则 1 第二章 简单化架构 1 第一节 简单语言php vs java 1 第二
  11. spring相关—IOC容器—使用注解配置bean
  12. linux 中文输入法的安装教程,linux输入法怎么安装
  13. 计算机基础应用课件,大学计算机基础应用课件
  14. 银行票据+票据池相关的项目讲解
  15. 【科普贴】MDIO接口详解
  16. 【技巧】SourceInsight如何设置为相对路径
  17. python爬虫豆瓣评论_Python爬虫实战:分析《战狼2》豆瓣影评
  18. VBA禁止更改工作表名称
  19. 计算机考试记不住题目,驾考科目一口诀,科一题目太多记不住?快来看看这些技巧...
  20. 企业员工流动大难管理?低代码+人事管理系统轻松掌控员工档案信息!

热门文章

  1. Linux终止ping命令
  2. PPP协议实现透明传输的2种方法以及工作状态
  3. 2020牛客国庆集训派对day2(A,C,D,E,F,G,H,J,)
  4. 室内场景三维对象分割(Ransac+supervoxel dbscan+guided filter)
  5. 详解 Linux操作系统的目录结构
  6. 说一说 SaaS 应用开发的难度在哪儿
  7. 数据结构:二叉树的创建,打印前中后序遍历,节点个数,叶子节点数,销毁,第K层中节点的个数,查找值为x的节点
  8. HTML标签之table
  9. Electorn与服务器交互的几种实现方式
  10. 限时免费领《新程序员》电子书啦!