C语言基础知识

C语言基础知识(不定时更新)

进制

表示方式 进制 备注
0x00 16进制 以0x开头
0b00 2进制 b可以大写,并不是全部编译器都都支持2进制数据
00 10进制
015 8进制 8进制以数字0开头

二进制运算符

运算符 功能 备注
~ 按位取反 对数的每个二进制位取反
& 按位与 对两个数的二进制位执行逻辑与操作
| 按位或 对两个数的二进制位执行逻辑与操作
^ 按位异或 对两个数的二进制位执行逻辑异或操作
<< 左移运算符 将一个数的二进制位向左移动指定位数,低位补0
>> 右移运算符 将一个数的二进制位向右移动指定位数

运算符优先级

  • 按位取反(~)的优先级高于逻辑运算符(如&|^)。
  • 移位运算符(<<>>)的优先级低于算术运算符(如+-)。

三元运算符

三元运算符(?:)是 C 语言中的一个简洁的条件运算符,语法如下:

1
condition ? expression1 : expression2; 

相当于:

1
2
3
4
5
if (condition) {
return expression1;
} else {
return expression2;
}

C 语言中的 宏(Macro) 是一种 预处理器指令,在编译源代码之前,预处理器会对代码中的宏进行替换、展开。宏的使用可以大大提高代码的灵活性和可维护性,但用得不好也容易出问题。

宏的分类

在C语言中宏分为了对象宏函数宏条件编译宏

对象宏

相当于文本替换,一般用来定义常量。

1
2
#define PI 3.14159
#definr LDE P0

在预处理阶段,在代码中遇到PI,就会被替换为3.14159

函数宏

类似函数,但是本质为文本替换,用于简单计算。

1
#define MAX(a,b) ((a) > (b) ? (a) : (b))

它并非直接调用函数,而是在编译阶段将**MAX(a,b)直接展开并替换为((a) > (b) ? (a) : (b))**。

条件编译宏

根据宏的定义与否,选择性编译代码。

1
2
3
4
#define DEBUG
#ifdef DEBUG
printf("This is debug");
#endif

  • **#define: ** 定义一个宏。
  • **#ifdef: ** 如果定义了宏,编译里面的内容。
  • **#ifndef: ** 如果没有定义宏,编译里面的内容。
  • #undef: 取消定义宏。
  • #if: 如果表达式的结果为真,编译后续代码。
  • #elif:#if#ifdef 判断失败时,判断其他条件。
  • #else: 如果 #if#ifdef 、**#ifndef** 的条件不成立测编译后续代码
  • #endif: 结束条件编译块