初识C语言 | 第4篇

发布时间:2026/7/6 14:22:44

初识C语言 | 第4篇 文章目录内置数据类型操作数核心释义分类举例操作符算数操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员操作符常用关键字数据类型相关流程控制相关存储类型与作用域相关其他变量命名内置数据类型本质数据类型就是给计算机下达的“圈地指令”。它规定了变量在内存中占据的空间大小字节数以及数据的存储格式如何解读二进制。作用决定了数据能存多大范围、精度如何是程序运行的基石。常用char 字符/小整数1字节short 短整型2字节int 基本整型4字节32/64位系统通用long 长整型4字节Windows32/64位long long 长长整型8字节float 单精度浮点通常4字节double 双精度浮点通常8字节long double 扩展精度浮点8字节操作数核心释义参与运算的数据/变量/常量就是运算符用来“加工处理”的原材料。运算符是动作操作数是动作作用的对象。分类举例单目运算符1个操作数!flag → 运算符 ! 操作数 flaga → 运算符 操作数 a​双目运算符左右2个操作数a 5 → 运算符 左操作数 a 右操作数 5x y → 运算符 操作数 x 、 y​三目运算符3个操作数cond ? exp1 : exp2 → 三个操作数依次为 cond 、 exp1 、 exp2一句话速记运算符干活的工具操作数工具要摆弄的料子。操作符算数操作符加法int main(){int sum 3 5;printf(“%d\n”,sum);return 0;}减法int main(){int sum 10 - 7;;printf(“%d\n”,sum);return 0;}乘法int main(){int sum 3 * 5;printf(“%d\n”,sum);return 0;}除法int main(){int m 15 / 5;printf(“%d\n”,m);return 0;}取摸取余int main(){int n 5 % 3;printf(“%d\n”,n);return 0;}幂运算求次方int main(){int s 2 ** 3;printf(“%d\n”,s);return 0;}整除向下取整除法int main(){int u 9 // 5;printf(“%d\n”,u);return 0;}位操作符位操作符是对整数的二进制位逐位进行运算的操作符。按位与示例5 3 - 1;//两位都为1才为1分析5的二进制是1013的二进制是011按位与结果是001对应十进制1|按位或示例5 | 3 - 7;//有一位为1就为1分析5的二进制是1013的二进制是011按位或结果是111对应十进制7^按位异或示例5 ^ 3 - 6;//两位不同为1相同为0分析5的二进制是1013的二进制是011按位与结果是110对应十进制6~按位取反示例~5 - -6;//0变11变0得补码分析-5的二进制是101对应的32进制数前面全是0按位取反是010对应32位二进制前面全是1即得补码。补码最高位是1为负数。对补码取反后加1再转化为十进制数是6。即绝对值为6最终结果为-6.正数按位取反 其结果就是取相反数再减一负数按位取反结果是取绝对值减一左移示例5 1 - 10;//各位左移右侧补零分析5的二进制是101左移后为1010对应十进制数是10右移示例5 1 - 2;//各位右移左侧补符号位分析5的二进制是101右移后为10对应十进制数是2无符号右移示例-1 1 - 2147483647;//各位右移左侧始终补0分析计算机实际存储负数用的是补码-1的补码是32个1。右移左侧补零其余位位全1对应十进制数为2147483647。赋值操作符各操作符功能详解 基本赋值操作符将右边的值直接赋给左边变量。例如 int a 10; 加法赋值等价于 a a b 。例如 a 5; 表示 a 增加 5。- 减法赋值等价于 a a - b 。例如 a - 3; 表示 a 减少 3。* 乘法赋值等价于 a a * b 。例如 a * 2; 表示 a 乘以 2。/ 除法赋值等价于 a a / b 。例如 a / 4; 表示 a 除以 4。 按位与赋值等价于 a a b 。用于对二进制位进行“与”运算后赋值。^ 按位异或赋值等价于 a a ^ b 。用于对二进制位进行“异或”运算后赋值。| 按位或赋值等价于 a a | b 。用于对二进制位进行“或”运算后赋值。‘’右移赋值等价于 a a b 。将 a 的二进制位向右移动 b 位后赋值。 左移赋值等价于 a a b 。将 a 的二进制位向左移动 b 位后赋值。使用注意事项复合赋值操作符具有隐式类型转换特性例如 short s 1; s 1; 是合法的。但short s 1; s s 1; 可能因类型提升而报错。’s s 1; ‘前面需要类型说明。赋值操作符的优先级较低表达式会先计算右边再执行赋值。位运算赋值操作符如 , ^ , | 常用于底层数据处理、标志位设置等场景。单目操作符只需要一个操作数就能完成运算的操作符。! 逻辑反操作用于将布尔值取反。例如 if (!a) 表示当 a 为假0时条件成立。布尔值只有两个固定取值的逻辑值负值操作符用于取相反数。例如 int b -a;正值操作符通常用于显式表明正数实际作用不大但可用于强制类型提升。 取地址操作符用于获取变量的内存地址。例如 int *p a;sizeof 计算操作数所占内存字节数是编译期常量。例如 sizeof(int) 返回 4在32位系统上。~ 按位取反操作符对二进制每一位取反。例如 ~5 即 ~0101 结果为 -6 补码表示。- – 自减操作符分为前置 --a 和后置 a-- 前者先减后用后者先用后减。 自增操作符同样分前置 a 和后置 a 语义与 – 类似。解引用操作符用于访问指针所指向的内存内容。例如 int val *p;(类型) 强制类型转换操作符用于显式转换数据类型。例如 (int)3.14 结果为 3。关系操作符大于 大于等于 小于 小于等于! 不等于 等于逻辑操作符 逻辑与只有当左右两个条件都为真时整个表达式才为真。例如 if (a 10 b 0) 表示“只有a大于等于10且b为0”才允许执行if下的代码。int main(){int a 15;int b 0;if (a 10 b 0)printf(“真\n”);elseprintf(“假\n”);return 0;}|| 逻辑或只要左右两个条件中有一个为真整个表达式就为真。例如 if (a 20 || b 0) 表示“分a大于等于20或b等于0”即可执行if下的代码。int main(){int a 25;int b 5;if (a 20 || b 0)printf(“真\n”);elseprintf(“假\n”);return 0;}条件操作符条件操作符也常被称为“三目运算符”其语法结构 exp1 ? exp2 : exp3作用用于简化条件判断的简洁写法功能等价于一个 if-else 语句但更紧凑、适合在表达式中直接使用。执行逻辑非常直观首先计算 exp1 条件表达式的值如果 exp1 为真非零则整个表达式的结果是 exp2 的值如果 exp1 为假零则整个表达式的结果是 exp3 的值。代码示例int main(){int a 10;int b 15;int max (a b) ? a : b;printf(“%d\n”, max);return 0;}逗号表达式语法形式 exp1, exp2, exp3, …, expN执行规则从左到右依次计算每个表达式整个逗号表达式的值是最后一个表达式 expN 的值。典型用途常用于 for 循环的初始化或更新部分或在需要多个表达式但只允许一个表达式的地方如宏定义、函数参数。示例int a (1 2, 3 4); // a 的值是 7因为逗号表达式取最后一个值for (int i 0, j 10; i j; i, j–) { … }下标引用、函数调用和结构成员操作符[] — 下标引用操作符用于访问数组元素或指针所指向的内存位置。示例 arr[3] 表示访问数组 arr 的第4个元素索引从0开始。() — 函数调用操作符用于调用函数括号内可传入参数。示例 printf(“Hello”) 、 add(2, 3). — 结构体成员访问操作符点操作符用于访问结构体变量的成员。示例struct Student s;s.age 20; // 使用 . 访问结构体成员- — 指针访问结构体成员操作符箭头操作符用于通过结构体指针访问其成员。示例struct Student *p s;p-age 20; // 等价于 (*p).age 20常用关键字数据类型相关用于定义变量或数据的类型。基本类型 char , int , float , double , void 无修饰符用于改变类型的长度或符号 short , long , signed有符号的 , unsigned 无符号的自定义类型构造 struct (结构体), union (共用体), enum (枚举)类型重命名 typedef流程控制相关用于控制代码的执行顺序。条件判断 if , else , switch , case , default循环结构 for , do , while跳转语句 break , continue , goto , return存储类型与作用域相关用于定义变量的生命周期、可见性或存储位置。存储类说明符 auto (自动变量默认), static (静态), extern (外部声明), register (寄存器)类型限定符 const (常量/只读), volatile (易变/防止优化)其他运算符 sizeof (计算大小)变量命名变量命名应“见名知义”语义化变量名应当清晰地表达其代表的含义避免使用无意义的字符。例如使用 int age 来存储年龄能够让人一眼看出该变量的用途而如果使用 int a 或 int aaa 来命名虽然语法合法但无法体现变量的实际意义会极大降低代码的可读性。变量命名需遵守硬性语法规则变量名只能由字母a-z, A-Z、数字0-9和下划线_组成且绝对不能以数字开头。此外C语言严格区分大小写 Age 和 age 会被视为两个不同的变量。变量命名不能是关键字变量名严禁使用C语言的32个标准关键字如 int , float , if , else , return 等。这些关键字已被系统赋予了特定的语法含义如果用作变量名会导致编译器报错。

相关新闻