C语言学习小记

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。尤其是计算机专业的学生,对其深痛恶绝,又爱又恨,但有些大神用起来确能信手拈来,妙手生花。下面是笔者在日常生活中常常遗忘的一些小技巧或者方法,作为汇总学习小记,与大家分享一下。

宏定义 #define

 在程序代码中使用可以大大提高代码的可读性以及降低后续维护修改的成本和难度。

例如修改修改硬件电路的控制引脚,高低电平的持续时间,返回一些简单的运算或者比较大小。

//使用宏定义替代引脚定义
#define BEEP  P2^0

//常用C51引脚定义
sbit  BEEP = P2^0;


//使用宏完成固定值的定义
#define High_level  200
#define Low_level   10


//使用进行求平方运算
#define square(x)  ((x)*(x))

void main()
{
  int a;
  a=5; //对a赋初值
  printf("%d的平方值为%d \r\n",a,sqare(a));
}

//使用宏比较两个值的大小
#define max(a,b) ((a)>(b)?(a):(b))

void main()
{
  int a,b;
  a=5; //对a赋初值
  b=7; //对b赋初值
  printf("%d %d 两个数中比较大的是%d \r\n",a,b,max(a,b));
}

 以上为简单的数组运算或者定值,宏定义也可以完成一些位运算操作

/***********************************************    
            常用逻辑运算符
   &   —与运算—当两个位同时为1的时候,才为1
   |   —或运算—当两个位同时为0的时候,才为0
   ^   —异或—两个位相同为0,相异为1
   ~   —取反—0取反为1,1取反为0
  <<   —左移—高位遗弃,地位补0
  >>   —右移—对无符号数,高位补0;
***********************************************/

#define GET_BIT(value,bit) ((value)&(1<<(bit)))    //读取指定位
#define CPL_BIT(value,bit) ((value)^=(1<<(bit)))   //取反指定位

#define SET0_BIT(value,bit) ((value)&=~(1<<(bit))) //把某个位置0
#define SET1_BIT(value,bit) ((value)|= (1<<(bit))) //把某个位置1


//使用宏修改函数或代码

#define value 

#ifndef value
	  代码段1 或者 需要执行的代码2	
#else
	  代码段2 或者 需要执行的代码2	
#endif

当然在一些时候还能用一些位运算处理完成一些复杂的运算过程,以下用 x60作为示例。

//常规使用*乘法运算符号完成 ax60操作
void main()
{
  int a;
  a=123;   //赋予初始化值
  a=a*60;   //常用的乘法运算
  printf("a*60=%d \r\n",a);
}



//在单片机中这会耗费大量时间,且RAM不足时容易溢出导致出错
//优化后处理方式如下
/*********************************  
    a=a*60
     =a*(4*15)
     =a*(4*(16-1))
     =a*4*16 - a*4*1
     =(a<<2)<<4  - (a<<2)
     =a<<6-a<<2
*********************************/


//使用位操作运算符号完成 ax60操作
void main()
{
  int a;
  a=123;   //赋予初始化值
  a=(a<<6)-(a<<2);   //常用的乘法运算
  printf("a*60=%d \r\n",a);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值