美文网首页C语言学习天花板C语言学习
C语言从零开始(六)-运算符与类型转换

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

作者: 天花板 | 来源:发表于2015-11-03 23:03 被阅读3855次

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

一,算术运算符

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

  • 单目操作是指对一个操作数进行操作。例如: -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语言从零开始(七)-其他运算符

相关文章

网友评论

  • 211e85d639a1:我是后来的,自学了一些vba,感觉lz写的特别适合自学。赞:+1:
  • dd8b8e0f297a:我觉得,,从简单到难,一点点深入,这样我们愿意一直跟下去😃😃
  • b9469aa56e3e:看到a++,和a+=5和a-=3我又犯强迫症了,心里别扭死了,越思考越糟心。但是楼主写的很好,感谢无数的智慧贡献者。
  • 4a08dc376134:感觉作者可以出书了!比那些C语言的书好太多
  • 无处安放的岁月:确实讲的有点简单,可以再出难点的,。把你们项目中遇到的难题放在上面讲解,这样会比较实用,但是还是要谢谢老师!
    天花板:@无处安放的岁月 这个系列是面相初学者的
  • a1a7dbe43dd6: :smile: 好东西啊,一字不落的看
  • Dyua:在以你的做模板,做笔记...感谢花板君....
  • baobaodz:我是大一的新生,基础的能看懂,关键是要经常练习啦,难的也要涉及些😁
  • 君自天:大二刚刚开始学C语言,慢慢加深难度就可以了,谢谢楼主啊,上课老师只是粗略讲讲
  • Choco_xuan:谢谢您的分享 一直在看 大三了 大二学的C 学时没当回事 现在从新拾起它
  • bdb27209c62e:麻烦大神指教,在最简单的乘除2那个程序中,如何提高除2时的精确度?
    bdb27209c62e:@天花板 改了后出错了??
    天花板:@羽天刃雪 用浮点类型即可
  • 831a37ed18d7:CS大一新生表示收获很多。有认认真真的抄下来ฅ( ̳• ·̫ • ̳ฅ)
    831a37ed18d7:@天花板 因为很多基本概念都不清楚,所以会抄下来。最近只是在敲最基础的,等这两天看了判定结构,循环结构之后就会开始刷oj了。
    天花板:@地狱在身后 不用抄,不过代码最好自己多敲几遍
  • d3c158c303a6:就是要基础的嘛。。不要太难呀。。初学者表示这样很好接受~~~博主继续加油~~会一直关注的!😁😁😁
  • fcc9548596bb:加油!很有用!
  • 加纳利:很感谢!我们这种大学计算机二级的水平都能看懂,很有收获啊。而且一点都不枯燥,直接从一看到六啦!非常感谢!
  • 一蓑烟雨啊:虽然很基础,但能看出其良苦用心!钦佩!谢谢!👍
    天花板: @尼采的太阳 谢谢
  • 41af3d070da6:写的不错,基础或难度都有需求的!
  • 4ed6afef78f9:循环 函数 指针 现在自学学习到指针了 , 学的头晕 ,不过看你写的前边的都挺不错,好理解,后边我也会一直看的。
  • 07fabaf63054:你慢慢更,没事,不要怕没人,因为简书人不多,学计算机的很少,后来的人会从第一张看起
    追光一星:@木秀于林1 同一
    加纳利:是啊是啊,我从一看到六了!而且没有快进,一个字一个字地看!
    天花板:@木秀于林2 😄😄😄
  • fa3a79e1f08f:循环,数组,字符串
  • a0b9c09296cb:看不懂,但好高端的样子
  • LRvov:重复
  • 行尸:。。
  • bdd7b2a003fb:沙发,沙发~
    希望讲一些具体的编程题目

本文标题:C语言从零开始(六)-运算符与类型转换

本文链接:https://www.haomeiwen.com/subject/ixyqhttx.html