在C语言中不同类型的数据也可以使用二元运算符进行运算,不过如果不明白其中的规律的话,编出来的程序就会有些危险了。

强制类型转换

自动转换类型

举个例子:

/*测试数据的类型转换*/

#include

int main(void)

{

float num0 = 0.0;

int num1 = 64400;

num0 = num1 / 150;

printf("%f", num0);

return 0;

}

结果:

按正常计算,num0应该等于429.333,可是按照上面的运算的话,结果是429,那.333去哪里了?眼前这个.333看起来是有些不起眼,但后面还有大量运算的话,这就不是小错误了,我们要严谨地学习C语言,现在就要把那丢失的部分找回来!

因为num1是整数类型,而150也是个整数,所以计算得到的结果也是整数类型,于是计算机将除法得到的结果四舍五入成了一个整数。可以用以下方法解决:

#include

int main(void)

{

float num0 = 0.0;

int num1 = 64400;

num0 = (float)num1 / 150;

printf("%f", num0);

return 0;

}

结果:

在num1前面加上(float)把num1强制转换成浮点类型变量,结果就是正确的。在C语言中可以将一种类型显式地转换成另一种类型,这个过程称为强制类型转换(cast)

只有两个操作数的类型相同,计算机才能执行二元算术操作(加,减,乘,除和取模)。在二元算术运算中使用不同类型的操作数,编译器就会把其中一个值域较小的操作数类型转换为另一个操作数类型,这称为隐式类型转换(implicit conversion)。再看看前面的计算表达式:

num0 = num1 / 150;

它计算为64400(int) / 150(int),结果是429(int),再将 int 转换成 float 得到429.0000.

只要算术表达式中有混合类型的变量,C编译器就会使用一组特殊的规则,确实表达式如何计算。下面就介绍这些规则。

隐式类型转换的规则

确定二元运算中的哪个操作数要转换为另一个操作数的类型时,其机制相当简单。其基本规则是,值域较小的操作数类型转换为另一个操作数类型,但在一些情况下,两个操作数都要转换类型。

为了准确地表述这些规则,需要比上述更复杂的描述,所以可以忽略一些细节,在以后需要时再考虑他们。

编译器按顺序采用如下规则,确定要使用的隐式类型转换:

如果一个操作数的类型是long double,把另一个操作数类型转换为long double类型。

否则,如果一个操作数的类型是double,就把另一个操作出类型转换为double类型。

否则,如果一个操作数的类型是float,就把另一个操作数类型转换为float类型。

否则,如果两个操作数的类型都是带符号的整数或无符号的整数,就把级别较低的操作数类型转换为另一个操作数的类型。无符号整数类型的级别从低到高为:

signed char, short, int, long, long long

每个无符号整数类型的级别都与对应的带符号整数类型相同,所以 unsigned int类型的级别与int类型相同。

否则,如果带符号整数类型的操作数级别低于无符号整数类型的级别,就把带符号整数类型的操作数转换为无符号整数类型。

否则,如果带符号整数类型的值域包含了无符号整数类型所表示的值,就把无符号整数类型转换为带符号整数类型。

否则,两个操作数都转换为带符号整数类型对应的无符号整数类型。

赋值语句中的隐式类型转换

赋值运算右边的表达式只与其左边的变量有不同的类型时,也可以进行隐私类型转换。在一些情况下,这会截短数值,丢失数据。例如,如果赋值操作将float或double类型的值存储在int或long类型的变量中。如下面代码所示

/*赋值语句中的隐式类型转换*/

#include

int main(void)

{

int num2 = 0;

float num3 = 2.5f;

num2 = num3;

printf("%d", num2);

return 0;

}

结果:

存储在num2中的值是2。这几行代码把num3的值(2.5)赋予int类型的变量num2,就丢失了小数部分.5,只存储了2.注意,在2.5f中使用了指定符f

赋值语句可能丢失信息,因为必须进行隐式类型转换,而编译器通常会为此发出一个警告。但是,代码仍可以编译,所以程序可能会得到不正确的结果。当需要在代码中进行可能导致丢失信息的类型转换时,最好使用显式类型转换。

好了,今天就分享到这里,欢迎大家在评论区和我一起讨论,以后遇到新知识楼主也会及时和大家分享,大家一起学习,一起努力!!

转载请注明出处!转载请注明出处!转载请注明出处!……

c语言整数除法转换成浮点型,C语言中的类型转换相关推荐

  1. c语言人民币小写转换成大写,C语言实现人民币小写转大写

    这个是很早之前用C语言实现的人民币小写转大写的方法 /************************************************************************* ...

  2. c语言求字符串转换成双精度_C语言如何输出双精度浮点型数据

    展开全部 double,双精度浮点型,输出使用%lf.e68a843231313335323631343130323136353331333365666166short int,短整型,输出对应%d. ...

  3. c语言求字符串转换成双精度_C语言实现把字符串中的数字转换成整数

    ===Tips:点击上方 蓝字 关注并查看历史消息===   本题实现的功能是把字符串中的数字提取转换成整型数字,例如:若输入字符串"ab56cd87",则输出结果:以%d格式输出 ...

  4. c语言字符串如何转换成gbk,C语言实现GBK/GB2312/五大码之间的转换(转)

    //--------------------------------------------------------------------------- // 大五码Big5转GBK码: void ...

  5. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...

  6. C语言 | 递归将一个整数n转换成字符串

    例73:C语言用递归方法将一个整数n转换成字符串.例如,输入483,应输出字符串"483",n的位数不确定i,可以是任意位数的整数. 解题思路:如果是负数,要把它转换为正数,同时为 ...

  7. c语言中输入字符转换成整数,c语言数字字符串转换成整数 C语言中如何将数字变成字符串啊?...

    C语言:把数字字符串转换成整型数字不懂时,别乱说:懂得时,别多说:心乱时,慢慢说:没话时,就别说. 运行环境:TC2. 把数字字符串转换成整型数字.比如说小编输入一个数字字符当你年轻时,你以为什么都有 ...

  8. 为什么python除法结果会有小数点0_关于python:为什么整数除法会在许多脚本语言中向下取整?...

    在我测试过的语言中,- (x div y )不等于-x div y: 我已经在Python中测试了//,在Ruby中测试了/,在Perl 6中测试了div: C具有类似的行为. 该行为通常是按照规范进 ...

  9. 用递归法将一个整数n转换成字符串

    用递归法将一个整数n转换成字符串(C语言) 题目要求:如标题.例如,输入481,应输出字符串"483".n的位数不确定,可以是任意位数的整数. 思路: 设定函数function(i ...

最新文章

  1. 慢吞吞的pip切换源
  2. 美团点评SQL优化工具SQLAdvisor开源
  3. Angular4 组件通讯方法大全
  4. 米家扫拖一体机器人重置键_全面升级——米家扫拖机器人1T体验
  5. Wordpress中显示页面当前位置
  6. 搭载第四代自研神龙架构 阿里云发布RDMA增强型实例等多款新品
  7. Lombok ——自动化方法生成器
  8. 免费视频压缩软件实现压缩视频不损画质的技巧
  9. cocos2d-x初步
  10. 文科如何晋级计算机职称,职称的档次是怎么确定来的?
  11. phython学习第二天
  12. Java常量池[乐乐独记]
  13. textfield观察UIControlEventEditingChanged时键盘快捷输入验证码会执行两次
  14. java+ssm基于微信小程序的游泳馆管理系统 uniapp 小程序
  15. c语言数组中逗号的作用,c语言练习(4)--逗号分割字符串形成二维数组
  16. html5 涂鸦板
  17. Microsoft Excel 教程:如何在 Excel 中使用数字格式?
  18. 使用线性回归实现波士顿房价预测
  19. Unity-网络开发(一)
  20. 前端html是什么?html5、css3是什么?

热门文章

  1. ChinaSkills-网络系统管理(2022改革Linux部分CentOS7安装运行预测[不带图形界面])
  2. 程序设计思维 B - 东东学打牌
  3. on error resume next用法
  4. Samplitude pro x4完美汉化破解版|Samplitude pro x4 64位完美汉化破解版(附汉化包)下载 v15.0.1.139
  5. QTabWidget的tabbar右侧背景色设置
  6. 计算机SCI 源代码,计算机类SCI检索源刊
  7. 捷联惯导算法(四)姿态更新算法
  8. MySQL内部联结和外部联结
  9. 吉时利Keithley软件2600系列2635B|2636B|2651A|2657A NS-SourceMeter源表软件
  10. 怎样把计算机扫描放到桌面,电脑扫描文件怎么弄【面对方法】