C语言中利用符详解(中)

[复制链接]
发表于 2025-12-25 17:30:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

放在最前面的

🎈 🎈 我的CSDN主页:OTWOL的主页,接待!!!👋🏼👋🏼
🎉🎉我的C语言初阶合集:C语言初阶合集,渴望能帮到你!!!😍 😍
👋🏼🎉🎊创作不易,接待各人留言、点赞加收藏!!! 🥳😁😍
1、利用数(Operands)

   利用数 是 利用符作用的对象。
在C语言中,利用数可以是常量、变量、表达式的值等。
利用数 通常位于 利用符 的 左侧 或 右侧(或两者都是,对于二元利用符而言)。

  2、单目利用符

   单目利用符的特点是只有⼀个利用数。
  2.1、分类

序号单目利用符 符号表明1!逻辑反利用符2++前置与后置自增利用符3- -前置与后置自减利用符4&取地点利用符5*解引用利用符6+正值利用符7-负值利用符8~按位(二进制位)取反利用符9sizeof范例长度盘算利用符10(范例)欺凌范例转换利用符2.2、举例分析(上代码)

(1)逻辑反利用符 !
增补:
   在C语言中,举行判断时,数字0 表现假,非0 的数字表现真。
  1. //逻辑反操作符 !
  2. //作用:对操作数的逻辑值取反。如果操作数为真(非0),则结果为假(0);
  3. //如果操作数为假(0),则结果为真(1)。
  4. int a = 5;
  5. int ret = !a; // ret 的值为 0,因为 5 为真,取反后为假(0)
  6. printf("%d\n",ret);
复制代码
输出结果

(2)前置与后置自增利用符(++) 和 前置与后置自减利用符( - -)
  1. //作用:使变量的值增加或减少1。
  2. //前置操作符(++var 或 --var)先改变变量的值,然后返回改变后的值;
  3. //后置操作符(var++ 或 var--)先返回变量的原始值,然后改变变量的值。
  4. #include<stdio.h>
  5. int main()
  6. {
  7.         int a = 10;
  8.         int b = ++a; // b 的值为 11,a 的值也变为 11(前置自增)
  9.         int c = a--; // c 的值为 11,但随后 a 的值变为 10(后置自减)
  10.         //输出
  11.         printf("b = %d\n", b);
  12.         printf("c = %d\n", c);
  13.         return 0;
  14. }
复制代码
输出结果

(3)取地点利用符 &
  1. //作用:获取变量的内存地址。
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         int a = 10;
  6.         int* pa = &a; // 指针pa 存储了变量 a 的内存地址
  7.         //输出
  8.         //%p  是以十六进制数的形式打印地址(内存单元编号)
  9.         printf("%p\n", &a);
  10.         printf("%p\n", pa);
  11.         return 0;
  12. }
复制代码
输出结果

(4)解引用利用符(*)
  1. //作用:通过指针获取其指向的变量的值。
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         int a = 10;
  6.         int* p = &a;
  7.         int b = *p; // b 的值为 10,即变量 a 的值
  8.         //输出
  9.         printf("b = %d\n", b);
  10.         return 0;
  11. }
复制代码
输出结果

(5)正负值利用符(+、-)
  1. //作用:用于表示数值的正负。
  2. // 正号(+)通常可以省略,因为它不改变数值;
  3. // 负号(-)则用于将数值变为相反数。
  4. #include<stdio.h>
  5. int main()
  6. {
  7.         int num = 10;
  8.         int a = +num; // a 的值为 10,正号不改变数值
  9.         int b = -num; // b 的值为 -10,取相反数
  10.         //输出
  11.         printf("a = %d\n", a);
  12.         printf("b = %d\n", b);
  13.         return 0;
  14. }
复制代码
输出结果

(6)按位取反利用符(~)
  1. //作用:对操作数的二进制表示进行按位取反(即0变为1,1变为0)。
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         int a = 0;
  6.         int ret = ~a; // 对于 a 的二进制表示(全为0),取反后全为1,即 -1(在补码表示下)
  7.         printf("%d\n", ret); // 输出 -1
  8.         return 0;
  9. }
复制代码
输出结果

(7)范例长度盘算利用符(sizeof)
  1. //作用:计算变量或数据类型所占的内存大小(以字节为单位)。
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         int a = 10;
  6.         // sizeof 计算 变量或数据类型所占的内存大小 返回值是 大于等于 0的数
  7.         // %zd 是无符号的占位符(格式控制符)
  8.         // %u 也是
  9.         printf("%zd\n", sizeof(a)); // 输出 a 所占的字节数,通常为 4(取决于编译器和平台)
  10.         return 0;
复制代码
输出结果

(8)欺凌范例转换利用符((范例))
  1. //作用:将操作数强制转换为指定的数据类型。
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         //定义一个双精度型 double 变量 pai
  6.         double pai = 3.14;
  7.         // P 的值为 3,因为 3.14 被强制转换为整数类型,小数部分被截断
  8.         int p = (int)pai;
  9.         //输出
  10.         printf("p = %d\n", p);
  11.         return 0;
  12. }
复制代码
输出结果

3、关系利用符

   在C语言中,关系利用符(也称为比力利用符)用于比力两个值,
并返回一个布尔值(在C语言中通常通过整数 0 或 1表现)。

    这些利用符通常用于条件语句(如 if 语句)和循环语句(如 while 或 for 循环)中,以控制步伐的流程。
  3.1、分类

   C语言中的关系利用符包罗:
  关系利用符功能 及 返回值即是 (==)判断两个值是否相称。假如相称,返回1(真),否则返回0(假)。不即是 (!=)判断两个值是否不相称。假如不相称,返回1(真),否则返回0(假)。大于 (>)判断左边的值是否大于右边的值。假如是,返回1(真),否则返回0(假)。小于 (<)判断左边的值是否小于右边的值。假如是,返回1(真),否则返回0(假)。小于即是 (<=)判断左边的值是否小于或即是右边的值。假如是,返回1(真),否则返回0(假)。大于即是 (>=)判断左边的值是否大于或即是右边的值。假如是,返回1(真),否则返回0(假)。3.2、举例分析(上代码)

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int a = 10;
  5.     int b = 20;
  6.     // 等于 (==)
  7.     if (a == b)
  8.     {
  9.         printf("a等于b\n");
  10.     }
  11.     else
  12.     {
  13.         printf("a不等于b\n");
  14.     }
  15.     // 不等于 (!=)
  16.     if (a != b) {
  17.         printf("a不等于b\n");
  18.     }
  19.     // 大于 (>)
  20.     if (a > b)
  21.     {
  22.         printf("a大于b\n");
  23.     }
  24.     else
  25.     {
  26.         printf("a不大于b\n");
  27.     }
  28.     // 小于 (<)
  29.     if (a < b)
  30.     {
  31.         printf("a小于b\n");
  32.     }
  33.     // 大于等于 (>=)
  34.     if (a >= 10)
  35.     {
  36.         printf("a大于等于5\n");
  37.     }
  38.     // 小于等于 (<=)
  39.     if (b <= 20)
  40.     {
  41.         printf("b小于等于10\n");
  42.     }
  43.     return 0;
  44. }
复制代码
4、逻辑利用符

   在C语言中,逻辑利用符 用于根据布尔值(在C语言中,通常利用 整数 0表现假,非 0 值表现真)的逻辑关系举行运算。
    这些利用符在 条件判断、循环控制 以及 位运算 等场景中都有广泛应用
  4.1、分类

   C语言中的逻辑利用符重要包罗以下三种:
  逻辑利用符功能 及 返回值短路特性逻辑与(&&)只有当两个利用数都为真(非0)时,结果才为真(1)。假如恣意一个利用数为假(0),则结果为假(0)。假如第一个利用数为假,则不管帐算第二个利用数,由于结果已经确定为假。逻辑或(两根竖线)只要有一个利用数为真(非0),结果就为真(1)。只有当两个利用数都为假(0)时,结果才为假(0)。假如第一个利用数为真,则不管帐算第二个利用数,由于结果已经确定为真。逻辑非(!)对利用数的布尔值举行取反。假如利用数为真(非0),则结果为假(0);假如利用数为假(0),则结果为真(1)。无

  • 逻辑或(两根竖线) :(||)
4.2、举例分析(上代码)

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int x = 5;
  5.     int y = 0;
  6.     // 逻辑与(&&)
  7.     if (x > 0 && y > 0)
  8.     {
  9.         printf("x和y都大于0\n");
  10.     }
  11.     else
  12.     {
  13.         printf("x或y(或两者)不大于0\n");
  14.     }
  15.     // 逻辑或(||)
  16.     if (x > 0 || y > 0)
  17.     {
  18.         printf("x或y(或两者)大于0\n");
  19.     }
  20.     // 逻辑非(!)
  21.     if (!y)
  22.     {
  23.         printf("y是0(假)\n");
  24.     }
  25.     else
  26.     {
  27.         printf("y不是0(真)\n");
  28.     }
  29.    
  30.     return 0;
  31. }
复制代码
运行结果:


5、短路特性(逻辑运算符 &&和 ||)

5.1、界说

   在C语言中,逻辑运算符的短路特性 是一种优化机制,
它答应在逻辑表达式求值过程中,一旦可以或许确定整个表达式的终极结果,就立刻克制对剩余部分的盘算。
这种特性重要实用于 逻辑与(&&)和逻辑或(||)运算符。

  5.2、分类

(1) 对于逻辑与运算符&&

   假如第一个利用数为 假(即 即是 0),那么无论第二个利用数的值是什么,整个逻辑表达式的结果都将是假。
因此,在这种情况下,C语言编译器会“短路”掉第二个利用数的盘算,由于它对终极结果没有影响。

  (2) 对于逻辑或运算符 ||

   假如 第一个利用数为 真(即 非 0),那么无论第二个利用数的值是什么,整个逻辑表达式的结果都将是真。
因此,在这种情况下,C语言编译器同样会“短路”掉第二个利用数的盘算。

  5.3、举例分析(上代码)

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     // 短路特性示例
  5.     int a = 0;
  6.     int b = 1;
  7.     int ret1 = 0;
  8.     int ret2 = 0;
  9.     // 逻辑与的短路特性
  10.     ret1 = ( (a != 0) && (a + b)); // 这里不会执行 a + b ,因为a != 0已经为假
  11.     //输出
  12.     printf("逻辑与 的短路结果:%d\n", ret1); // 输出0
  13.     // 逻辑或的短路特性
  14.     ret2 = ( (a == 0) || (a + b)); // 这里  (a + b) 不会执行,由于 a == 0为真(即 a != 0为假),
  15.     // 但 || 只需要一个真值 , 且短路特性只跳过不必要的计算。
  16.    
  17.     // 正确的展示短路特性的写法应该是确保第一个条件为真时不会执行第二个可能导致错误的条件。
  18.     // 例如:ret = (1 || (a + b) ); // 这里不会执行 (a + b),因为 1 已经为真
  19.    
  20.     //输出
  21.     printf("逻辑或 的短路结果:%d\n", ret2); // 输出 1
  22.     return 0;
  23. }
复制代码
运行结果:


END

天天都在学习的路上!
On The Way Of Learning
   “哇哦😎,我们一起走过了这篇文章的路程🚀。你以为这篇文章对你有资助吗😜?
有没有什么特别的感受大概想法💡想要和各人分享呢😏?
赶紧在品评区留言吧,让我们的头脑在这里碰撞出火花🔥💥!”

  

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表