C语言基础之编译预处理及位运算
2017-06-16 14:09
62 查看
编译预处理及位运算
宏定义定义: #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 "%d\n"
#define F "%f\n"
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
说明:预处理程序扫描到#ifdef,判别其后面的<标识符>是否被定义过(一般用#define命令定义),从而选择对哪个程序进行编译。
位运算符和位运算
位运算符 含义 举例
~ 按位取反 ~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);
(2)将a中右移n位,由于a不带符号,所以左端补0.
c=a>>n;
(3)使b与c按位或运算,得到最终结果
相关文章推荐
- C语言基础之编译预处理及位运算
- c语言基础1—编译链接、整型、枚举、常量、预处理、typedef
- C语言基础-复合类型数据,编译相关,关键字,位运算,内存管理,gdb调试
- C语言基础-08-预处理指令2-条件编译
- C语言基础之预处理指令
- C语言基础:C语言宏定义(3) - 条件编译
- c++基础11:变量的命名约定 头文件的问题 程序的预处理编译链接过程
- DirectX 3D_基础之HLSL(高级着色语言) HLSL着色器程序的编制 HSLS变量 HLSL入口函数 HLSL程序编译 变量常量类型 设置方法 前缀 关键字 类型 语句 类型转换
- C语言与C++中中编译预处理的学习记录
- 黑马程序员——C语言基础——预处理
- 软考-程序设计语言基础(编译原理)
- c语言编程基础------1.c语言编译原理介绍
- C 语言复习与提高--- VI. 编译预处理
- C语言基础—进制 基本数据类型的存储 位运算
- C语言基础之预编译
- C语言基础:C语言宏定义(4) - 多文件编译
- C语言条件编译及编译预处理阶段
- 【C语言基础一百题7】46-55题对于头文件和多文件编程的理解以及位运算
- C语言中的编译预处理
- 【c语言基础必备】gcc编译器的简单编译