C语言从零开始(六) |
您所在的位置:网站首页 › 单目运算符与双目运算符 › C语言从零开始(六) |
今天谈到的知识其实之前或多或少都接触过了,我们再把它整理一下。编程中几个基本的动作是运算、判断和比较,我们接下来的内容就重点学习这些。 一,算术运算符算术运算符分为单目和双目操作: 单目操作是指对一个操作数进行操作。例如: -a是对a进行一目负操作。 双目操作(或多目操作)是指两个操作数(或多个操作数)进行操作。 1.双目运算符这个比较好理解,如同数学中的运算符号。 + : 加法运算 - : 减法运算 * : 乘法运算 / : 除法运算 % : 求余运算(又叫模运算) 重点说一下后两个运算符: 除法运算符左右两边的数据类型决定了运算结果的类型。两边都是整数结果为整数,有任一方是小数,结果为小数。如果两个整数相除有余数,舍弃余数。运算符右边的数不能为0 整除运算符左右两边的数据必须都是整数,结果是这两个数相除的余数值。如果能整除,结果为0下面我们用一段代码说明这四个运算符的用法: int a = 3; int b = 2; int sum, diff, product, res, mod; // + sum = a + b; printf("sum = %d\n", sum); // - diff = a - b; printf("diff = %d\n", diff); // * product = a * b; printf("product = %d\n", product); // / res = a / b; printf("res = %d\n", res); // % mod = a % b; printf("mod = %d\n", mod);这段代码的结果如下: 运行结果 2. 单目运算符C语言中有两个很有用的单目运算符。这两个运算符就是增1和减1运算符"++"和"--"。 ++ 操作数加1 -- 操作数减1如: x = x + 1; x++; ++x;这三句意义相同。 x = x - 1; x--; --x;这三句意义也相同。 自增和自减运算需要注意这样的问题: x = m++; x = ++m;这两句的结果完全不同。 x = m++; // 表示将m的值赋给x后, m加1。 x = ++m; // 表示m先加1后, 再将新值赋给x。我们看一下这段代码: int a = 1; int b = 1; int ret; ret = a++; printf("ret = %d, a = %d\n", ret, a); ret = ++b; printf("ret = %d, b = %d\n", ret, b);结果如下: QQ截图20151103220816.png关于 -- 的程序大家自己实现一下,看看会是神马结果。 如果你对运算符还有什么疑问,请修改这些代码,验证你的疑问。通过代码学习永远是最好的方法。 二、赋值语句中的数据类型转换 1. 赋值运算符这个大家都很熟悉,就是“=”。它的作用是把右边的值或计算结果赋给左边的变量。如: int a = 0; int a = b + c;赋值运算有一种特殊的写法: int a = 0; a = a + 5; a += 5; a = a - 3; a -= 3;第二行和第三行意思相同,第四行和第五行意思相同,可以互相替换。这是一种C语言中的简便写法。 2. 类型转换类型转换是指不同类型的变量混用时的类型改变。 2.1 隐式类型转换基本原则: 在赋值语句中, 等号右边的值转换为等号左边变量所属的类型 不同类型混合计算时,结果类型为数据类型级别较高的 所有的浮点预算都是以double进行的数据类型级别顺序: char, short < int < float < double 请看下面这段代码: main() { int a, b = 3; float f = 1.5; a = f * b; // 整数和浮点类型运算,结果为浮点类型,因为它类型级别高 printf("a = %d\n", a); a = f; // 把一个浮点类型的变量赋值给整数类型,小数部分会被自动舍去 printf("a = %d\n", a); }这段程序的运行结果为: a = 4 a = 1其他类型赋值时的隐式转换请大家自己编程实验。 这里有个重点问题需要强调,浮点类型的和整数类型计算时,结果为浮点类型。我们看一个常见问题。 main() { float f; int a = 5; f = a / 2; printf("f = %f\n", f); }这段程序的运行结果是: f = 2.0000原因在于,a是个整数,2也是个整数,它们的计算结果也是整数。此时,就已经舍弃了计算结果中的小数部分。因此,赋值时就自然没有小数部分。 如果我们需要得到f = 2.5怎么办呢?可以这样写: main() { float f; int a = 5; f = a / 2.0; printf("f = %f\n", f); }因为整数a和浮点数2.0计算的结果是浮点型(double),因此保留了小数部分。之后再把=右边的double类型转换成左边的float类型。仔细想想,能理解吧。 2.2 强制类型转换在计算中,我们常常需要主动要求计算机改变变量的类型。这是可以这样做。 (数据类型)(表达式或变量)按照这种格式写,右边部分的类型就会被强制转换成左边括号中的类型。看看具体代码: main() { float f; f = 6.6 / 3; printf("f = %f\n", f); f = (int)6.6 / 3; printf("f = %f\n", f); f = (int)(6.6 / 3); printf("f = %f\n", f); }结果如图所示: 运行结果重点说一下 f = (int)6.6 / 3;和f = (int)(6.6 / 3);的区别,前者是把6.6转成int型,变成6之后再计算。后者是先计算6.6 / 3,得到结果2.2,之后再强行转换成int型。 今天先说到这里,其他的运算符下次再聊。 很多朋友来信说希望讲一些难度更高的知识点,不知道大家是否觉得这个系列讲得太基础。 我在这里做个简单调查,觉得前几篇有收获的同学请留言告诉我,觉得过于基础的同学请留言说明你们希望讲些什么知识点。 我是天花板,让我们一起在软件开发中自我迭代。 如有任何问题,欢迎与我联系。 上一篇:C语言从零开始(五)-常量&变量 下一篇:C语言从零开始(七)-其他运算符 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |