当前位置: 首页 > news >正文

c语言不同数据类型之间的运算(隐式转换、整型提升、强制类型转换、不同类型之间的运算)

一、整型提升

       整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。

上面的官方描述可以概括如下两点:

1.一个表达式中用到了整型值,那么类型为char、short int活整型位域(这几者带符号或无符号均可)的变量,以及枚举类型的对象,都可以被放在这个整型变量的位置。

2. 如果1)中的变量的原始类型值域可以被int表示,那么原值被转换为int;否则的话,转为unsigned int。

即字符型、short、int及枚举类型在参与运算的时候,都会转换成int类型进行运算,如果int类型不足以表示则转换成unsigned int类型。

可以使用以下程序进行验证

二、隐式转换

1.隐式转换

c语言在以下几种情况下会进行隐式转换

1、算术运算式中,低类型能够转换为高类型。

       例:int + char  +double运算的结果应该为double类型

2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。

       例:int  =  float + char,表达式的右边char 类型和float类型进行运算进行隐式转换为float类型,在将float类型转换为int类型赋值给表达式左边的int类型变量。

3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。

4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。

2.算术运算的隐式转换

转换规则如下

1、字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。

 2、short型转换为int型(同属于整型) 。

3、float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 。其次,有下面的规则。

同时,算术运算中不同类型之间的运算也遵循隐式转换规则和整型提升规则。

C语言算术运算中的转换规则

3.强制类型转换

       强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用制类型转换运算符来把值显式地从一种类型转换为另一种类型。

       例:float b = 15.0;int a = (int)b;

4.强制类型转换和隐式转换的区别

        强制类型转换可以将任意类型转换成其他类型,可以有程序员自己决定;隐式转换是C语言中的一种运算规则,它在不同的情景下有不同的表述,一般的隐式类型转换只能将小类型转换成较大类型的,具体还要根据问题另行讨论。

三、不同数据类型之间的运算

       不同数据之间的运算,实际上都是在隐式转换和整型提升规则基础之上进行运算。例如:

     

相关文章:

  • C语言switch中default的使用
  • 数据结构---排序(插入排序、希尔排序、堆排序、选择排序、冒泡排序、快速排序、归并排序、计数排序)
  • Linux---centos常用开发工具(vim、gcc/g++、gdb、Makefile、git)
  • Linux进度条程序(模拟实现进度条)
  • 最全的《剑指offer》题目解析---C++
  • C/C++中static的作用(修饰局部变量、修饰全局变量、修饰函数)
  • C++ ---入门基础知识( 命名空间、函数重载、引用、缺省参数、内联函数)
  • 剑指offer---二维数组中的查找
  • 剑指offer---替换空格
  • 剑指offer---第一个只出现一次的字符
  • C++ ---类和对象(上)
  • C++ const对象与非const对象的相互调用、const成员函数与非const成员函数的相互调用
  • C++ --- 类和对象(中)
  • 剑指offer---旋转数组的最小的数字
  • C++ --- 日期类的实现
  • 【mysql】环境安装、服务启动、密码设置
  • laravel with 查询列表限制条数
  • Laravel 实践之路: 数据库迁移与数据填充
  • Python中eval与exec的使用及区别
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • yii2中session跨域名的问题
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 大整数乘法-表格法
  • 前端技术周刊 2019-02-11 Serverless
  • Semaphore
  • 交换综合实验一
  • ​比特币大跌的 2 个原因
  • #git 撤消对文件的更改
  • #Linux(帮助手册)
  • $(function(){})与(function($){....})(jQuery)的区别
  • (1)SpringCloud 整合Python
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)php投票系统 毕业设计 121500
  • (转) Android中ViewStub组件使用
  • (转)母版页和相对路径
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • **CI中自动类加载的用法总结
  • ./和../以及/和~之间的区别
  • .net 获取url的方法
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net的DataSet直接与SQL2005交互
  • ??在JSP中,java和JavaScript如何交互?
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [ASP]青辰网络考试管理系统NES X3.5
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C#]winform部署yolov5-onnx模型
  • [CISCN2019 华北赛区 Day1 Web2]ikun
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [C语言]——C语言常见概念(1)
  • [Docker]五.Docker中Dockerfile详解
  • [HDOJ4911]Inversion