C语言冷知识

C语言的发展:

  1. ALGOL
  2. BCPL
  3. B
  4. Tradition C
  5. K&R C
  6. ANSI C
  7. ANSI/ISO C
  8. C99

C一直是应用最广的编程语言之一,C编译器支持主流CPU架构和各种操作系统。下面我们来讨论两件事:

  • 位操作
  • 宏和预编译

C中的位操作

C语言中涉及位操作的操作符有六种:

  • &(按位与)这个操作符对两个数字进行按位与操作,只有当两个bit位都为1时,结果为1。
  • |(按位或)这个操作符对两个数字进行按位或操作,只要两个bit位有一个为1时,结果为1。
  • ^(按位异或)这个操作符对两个数字进行按位异或操作,两个bit位不同时,结果为1。
  • <<(左移位)
  • >>(右移位)
  • ~ (按位取反)

代码示例:

位操作冷知识:

  1. 移位数不能为负数,2 << -2、2 >> -2 是不允许的。
  2. 在面试中出题最多的运算符是(异或)
  3. 区分位运算符和逻辑运算符(逻辑运算返回真假,位运算返回一个数):
  4. 左移1位和右移1位分别等同于乘以2和除以2:
  5. 用位操作符判断一个数是奇数还是偶数:如果表达式(x & 1)非零,那么这个数是奇数,否则是偶数。
  6. 小心取反操作符:如果一个数是正整数,取反之后有可能为负(注意符号位)。

宏和预处理

  1. 宏只是一个简单的替换:
  2. 宏可以有参数,但是不进行类型检查,下面的宏INCREMENT(x),x可以是任何类型:
  3. 要注意宏展开之后的运算优先级:
  4. 连接符号##:

  5. 使用#转为字符串:
  6. 简单带参宏(有时容易带来问题)可以用内联函数替代:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注