C语言学习天花板C语言学习

C语言从零开始(六)-运算符与类型转换

2015-11-03  本文已影响3855人  天花板

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

一,算术运算符

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

1.双目运算符

这个比较好理解,如同数学中的运算符号。

+ : 加法运算
- : 减法运算
* : 乘法运算
/ : 除法运算
% : 求余运算(又叫模运算)

重点说一下后两个运算符:

下面我们用一段代码说明这四个运算符的用法:

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运算符"++"和"--"。

如:

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 隐式类型转换

基本原则:

数据类型级别顺序:

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语言从零开始(七)-其他运算符

上一篇下一篇

猜你喜欢

热点阅读