C语言从零开始(六)

您所在的位置:网站首页 单目运算符与双目运算符 C语言从零开始(六)

C语言从零开始(六)

2024-07-15 18:49| 来源: 网络整理| 查看: 265

今天谈到的知识其实之前或多或少都接触过了,我们再把它整理一下。编程中几个基本的动作是运算、判断和比较,我们接下来的内容就重点学习这些。

一,算术运算符

算术运算符分为单目和双目操作:

单目操作是指对一个操作数进行操作。例如: -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