概述
编译预处理及位运算
宏定义
定义: #define 标识符 字符串 或 #define 标识符(形参表) 字符串
说明:“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。define为宏定义命令。“标识符”为所定义的宏名。 “字符串”可以是常数、表达式、格式串等。
例:
#define PI 3.1415926
#define CIRCUM(r) (2.0*PI*(r))
计算周长时: circum=CIRCUM(3.4);
注意:(1)宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
(2)宏定义必须写在函数之外,作用于为宏定义起到源程序结束,如要终止其作用域可使用#undef命令
(3)宏名若在源程序中用双撇号括起来,则预处理不对其作宏代换
(4)宏定义允许嵌套
(5)对输出格式作宏定义,可以减少书写麻烦
例:
#include<stdio.h>
#define P printf
#define D "%dn"
#define F "%fn"
void main()
{
int a=5;
float b=3;
P( D F,a,b);
}
条件编译
条件编译有几种形式
1.#if形式
一般格式:
#if<表达式>
<程序段1>
[#else
<程序段2>]
#endif
也可以写为
#if<表达式>
<程序段1>
#endif
2.#ifdef形式或#ifdef形式
一般格式:
#ifdef (或#ifndef)<标识符>
<程序段1>
[#else
<程序段2>]
#endif
位运算符和位运算
位运算符 含义 举例
~ 按位取反 ~a,对变量a中全部二进制位取反
<< 左移 a<<2,a中各位全部左移2位,右边补0
>> 右移 a>>2,a中各位全部右移2位,左边补0
& 按位与 a&b,a和b中各位按位与进行“与”运算
| 按位或 a|b,a和b中各位按位与进行“或”运算
^ 按位异或 a^b,a和b中各位按位与进行“异或”运算 //不同则为1
例:将一个十进制数转换成二进制数
程序分析:C语言中printf函数提供%x%d%o格式可将一个整数以十六进制、十进制、八进制形式输出,但没有二进制输出格式。人工转换的方法是设置一个屏蔽数,其中只有一位是1,其余各位均为0,与被转换数进行“与”运算,根据运算结果判断被测试的那一位是1还是0.其余二进位的测试方法相同。一个整数占两个字节,共有16个二进制位。
#include<stdio.h>
void main()
{
int i,bit;
unsigned int n,mask;
mask=0x8000;
printf("enter your number:");
scanf("%d",&n);
printf("binary of %d is:",n);
for(i=0;i<16;i++)
{
bit=(mask &n)?1:0;
printf("%1d",bit);
if(i==7)
printf("--");
mask=mask>>1; //右移一位,得到下一个屏蔽字
}
}
a循环右移n位步骤
(1)使a(无符号数)中各位左移(16-n),使右端的n位放到b中的高n位中,其余各位补0
b=a<<(16-n);
c=a>>n;
(3)使b与c按位或运算,得到最终结果
最后
以上就是动听香氛为你收集整理的C语言基础之编译预处理及位运算的全部内容,希望文章能够帮你解决C语言基础之编译预处理及位运算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复