C语言系列文章目录
第一章 C语言核心语法(一) 第二章 C语言核心语法(二)
文章目录
- C语言系列文章目录
- 前言
-
- ***本文不涉及抄袭或用以任何商业用途,本人也遵守本站一切相关规定!如有侵犯版权与个人知识产权请及时联系删除!该系列文章仅用于个人学习的记录和参考以及分享知识!*** 本文中图片引用均出自黑马程序员视频课程,感兴趣的小伙伴可以自行学习
- 一、算数运算符
-
-
- 1.转换与注意事项
- 2.加减乘除取余
-
- 二、自增自减运算符
-
- 三、赋值运算符
- 四、关系运算符
- 五、逻辑运算符
- 六、三元运算符
- 七、逗号运算符(分隔符)
- 总结
前言
本文不涉及抄袭或用以任何商业用途,本人也遵守本站一切相关规定!如有侵犯版权与个人知识产权请及时联系删除!该系列文章仅用于个人学习的记录和参考以及分享知识! 本文中图片引用均出自黑马程序员视频课程,感兴趣的小伙伴可以自行学习
一、算数运算符
1.转换与注意事项
在计算中存在隐式转换和强制转换,这是因为计算机需要保障其数据类型一致才可以计算得出结果。 隐式转换在不同数据类型计算赋值的时候会自动触发,面对小的数据类型扩展为大的数据类型,例如int和double进行计算,其结果会是double类型,因为int是取值范围小的数据类型,故被转换。 而short char类型则会在运算的时候先提升为int类型再计算 强制转换是面对大的数据类型缩小为小的数据类型时手动触发的, 格式:目标数据类型 变量名 =(目标数据类型)被强转的数据 int b = 65536; short i = (short)b;
//隐式转换:short类型的数据在参与计算时候,提升为int
short s1 = 10;
short s2 = 20;
//强制转换:将其变成int类型的数据结果再转换为short并打印
short result = (short)(s1 + s2);
printf("%d\\n", result);
而当字符与数字转换的时候会查询ASCII码表
//字符转数字
//'a''A''o'
printf("%d\\n", 'a');
printf("%d\\n", 'A');
printf("%d\\n", '0');
char c = 97;
printf("%d\\n", c); //97
printf("%c\\n", c);//'a'
2.加减乘除取余
这是基本的算数运算符类型
//+ -数字直接进行计算
printf("%d\\n", 3 + 4);
printf("%d\\n", 3 – 4);
printf("%d\\n", 3 * 4);
printf("%.2lf\\n", 1.1 + 1.01);
printf("%.21f\\n", 1.1 – 1.01);
printf("%.2lf\\n", 1.1 * 1.01);
int a = 1;int b = 2;
printf("%d\\n", a + b);
//除法(/)
printf("%d\\n", 10 / 2); // 5
//取余(%)
printf("%d\\n", 10 % 2); // 0
printf("%d\\n", 10 % 3); // 1
// 通用细节:
//1.整数计算,结果一定是个整数
printf("%d\\n", 3 + 2);// 5
printf("%d\\n", 10 / 3);// 3
//2.小数计算,结果一定是个小数
printf("%1f\\n", 10.1 + 3.0);
//3.整数和小数计算,结果一定是个小数
printf("%1f\\n", 10 / 3.0);
//4.小数直接参与计算其结果是可能不精确
printf("%1f\\n", 3.333333333333333 + 6.666666666666666);
printf("%1f\\n", 10.0 / 3.0);
// 除法的细节:
// 1.不能除以e
// printf("%d\\n", 10 / θ);
// 取余的细节:
//1.运算的数据必须全部都是整数
printf("%d\\n", 10 % 3);
//2.获取余数的正负,是跟第一个数字保持一致的
printf("%d\\n", 10 % 3); // 1
printf("%d\\n", –10 % 3); // -1
printf("%d\\n", 10 % –3); // 1
// 3.不能除以0也不允许对0取余
注意:/和%的区别:两个数据做除法,/取结果的商,%取结果的余数。 而整数计算只能得到整数,要想得到小数,必须有小数参与运算。 同时,数据类型一致则直接计算,不一致则需要转换。
二、自增自减运算符
自增和自减运算符的作用如下所示
也就是说可以有a++和++a,有a–和–a,那么这又有什么不同呢?显然在一行代码里单独出现,结果是相同的,但如果组合起来就不一样了! 首先a++是先用后加的,加号在后面,方便记忆。++a是先加后用的,加号在前面。 这在代码里就体现在
int a = 10;
int b = a++;
int c = ++a;
b如果打印会发现是10 c如果打印会发现是12,因为上面的a已经加1了,这次又加1,就是12了 好,那么再看一道题
int i = 10;
int j = 5;
int k = i++ + ++i – —j – i—;
printf("%d\\n", k);
是的,Windows和Linux的方式优先级其实不同,在我们的学习中以Windows为准哦。
int a = 10;
int k1 = a++ + a++;
//10+10=20
//a=12
int k2 = ++a + ++a;
//14+14=28
//a = 14
int k3 = ++a + a++;
//15 + 15 = 30
//a = 16
int k4 = a++ + ++a;
//17+17=34
printf("%d\\n", k1);//20
printf("%d\\n", k2);//28
printf("%d\\n", k3);//30
printf("%d\\n", k4);//34
三、赋值运算符
例如a += b就等同于是 a = a + b了
四、关系运算符
注意:切记不可这样表达式子,即(100 >= a >= 0); 这是错的,而是应当选择(100 >= a) && (a >= 0);关系运算符不可以在一个式子里出现两个。
五、逻辑运算符
也就是说&&是条件都满足才为真,||有一个满足就为真,而!就是反过来而已
//1:成立 0:不成立
//&&(与):并且,而且
//计算规则:只有两边都成立,那么最终的结果才是成立的,只要有一个不成立,最终的结果都是不成立的
printf("%d\\n", 1 && 1);// 1
printf("%d\\n",0&&0);// 0
printf("%d\\n",1 && 0);// 0
printf("%d\\n",0&&1);// 0
printf("———\\n");
// |(或):或者
//计算规则:两边都不成立,那么最终的结果才是不成立的,只要有一个成立的,最终的结果就是成立的。
printf("%d\\n", 1 || 1);// 1
printf("%d\\n", 0 || 0);// 0
printf("%d\\n", 1 || 0);// 1
printf("%d\\n", 0 || 1);// 1
printf("———\\n");
//取反
//细节:实际开发当中,最多只用一个
printf("%d\\n",!1);// θ
printf("%d\\n",!0);// 1
return 0;
须知,逻辑运算符带有短路效果,这是为了节省机能做出的优化策略 例如
int a=0;
printf("%d",a>1 && a<=3);
显然,a不大于1,故为假(0),a小于等于3,故为真(0),与操作会为0,但是与操作只有都是1才会为1,左面已经知道为0了,那再算右面还有意义吗?显然没有,直接得到与操作为0。 这就是短路效果,右面不再参与计算,或操作也一样。
六、三元运算符
示例
// 三元运算符、三元表达式、问号冒号运算符
//格式:
//关系表达式?表达式1:表达式2;
//获取两个变量中的较大值
int a = 10;
int b = 20;
int c = a > b ? a : b;
printf("%d\\n",c);
printf("%d\\n",a > b ? a : b);
a如果大于b则c=a,否则c=b,问号之前是条件判定,问号之后是两个选项,为真则第一个(冒号之前),为假则第二个(冒号之后)。
可如果是多个问号多个冒号的题目该如何解答?
示例如下
//练习2:
int a=3,b=2,c=1;
int max = a > b ? a > c ? a : c : b >c ? b : c;
printf("max = %d\\n", max);
寻找第一个问号,然后往后找是否有第二个问号,如果没有则正常求解,如果有第二个问号,则继续找看看是否有第三个第四个问号。这里我们假设只有两个问号,往后找发现了第一个冒号和第二个冒号,说明没有问号了(也就是判断条件就两个) 则最先出现的问号和最后出现的冒号做匹配,最后出现的问号和最先出现的冒号做匹配。 这就像括号一样,我们可以把问号看成左括号,冒号看成有括号,一一对应!
int a = 3, b = 2, c = 1;
int max = a > b ? (a > c ? a : c) : (b > c ? b : c);
printf("max = %d\\n", max);// 3
a大于b,故选择(a > c ? a : c)再做判断,然后再从括号里可得应该选择a,也就是3了。
int x = 10;
int y = 20;
int z = 30;
int h = 40;
int w = 50;
int number = x > h ? z > w ? x > z ? x > y ? x : y : z : w : w > h ? w : h;
//像刚才一样视作括号一样分割就会得到
int number = x > h ? (z > w ? (x > z ? (x > y ? x : y) : z) : w) : ( w > h ? w : h);
printf("%d\\n", number);
请读者务必自行推导一次!
七、逗号运算符(分隔符)
运行规则是: 1.从左到右 2.最后一个子表达式的结果,是整个表达式的结果 3.优先级最低(永远是最后执行) 示例
//逗号运算符 (分隔符)
int i;
printf("%d\\n",(i =3,++i,i++,i + 5));

总结
以上就是今天要讲的内容,本文学习了C语言的运算符相关内容,具体练习和讲解应当选择观看黑马程序员C语言教程。特在此说明。




