-
C语言不同数据类型的混合运算
2021-01-19 22:01:572、在赋值运算时,如果赋值号两边的数据类型不同,赋值号右边的类型将转换为左边的类型。如果右边的数据类型长度比左边长时,将丢失一部分数据,(如65537用int表示,为0000 0000 0000 0001 0000 0000 0000 0001,... -
C语言不同数据类型间的混合运算+常见数据类型
2017-07-29 21:24:41在程序中经常会遇到不同类型的数据进行运算,若一个运算符两侧的数据类型不同,则先自动进行类型转换,使两者具有同一类型,然后进行运算,现将规律总结如下: 1. +. -. *. /运算的两个数中有一个数为float或double...在程序中经常会遇到不同类型的数据进行运算,若一个运算符两侧的数据类型不同,则先自动进行类型转换,使两者具有同一类型,然后进行运算,现将规律总结如下:
1. +. -. *. /运算的两个数中有一个数为float或double型,结果是double型,因为系统将所有float型数据都先转换为double型,然后进行运算;
2. 若int型与float或double型数据进行运算,先将int型和float型转换为double型,然后进行运算,结果为double型;
3. Char型与int型数据进行运算,就是把字符的ASCII码与整型数据进行运算;
如:12+'A'=12+65=77
4. 两个int型相除,不管是否有余数,结果都为整型;如:5/10 输出是整数部分:0
5. 强制类型转换的一般形式为:(类型名)(表达式),将表达式整体的输出结果转换,若写成(int)x+y,则是将x先转换为整型,再与y相加,
如上式中: 5/10的输出结果为:0
5.0/10的输出结果为:0.5
(fioat)(5/10)的输出结果为:0.00
(float)5/10的输出结果为:0.5
这里顺便附上C语言的常见数据类型:
-
C语言中不同数据类型间混合运算的转换规则
2011-09-25 00:04:21不同数据类型的数据进行预算时,必须先转换成同一数据类型,然后才能进行运算。转换的规则如下图所示: 图中横向向左的箭头表示必定的转换,如字符数据必须先转换成整数,short型转换为int型,float型数据在2、不同数据类型间混合运算的转换规则
不同数据类型的数据进行预算时,必须先转换成同一数据类型,然后才能进行运算。转换的规则如下图所示:
图中横向向左的箭头表示必定的转换,如字符数据必须先转换成整数,short型转换为int型,float型数据在运算时一律先转换成double型,以提高运算精度(即使是两个float型数据进行相加,也先都化成double型,然后再相加)。
纵向的箭头表示当运算对象为不同数据类型时转换的方向。注意箭头只是表示数据类型级别的高低,由低向高转换,但并不需要逐级转换而是直接进行转换。例如:一个int型数据和double型数据进行运算,运算时是直接将int型转换成double型而非先将int型转换成unsigned int型,再转成long型,再转成double型。
-
c语言中中不同类型数据间的混合运算
2018-05-17 11:05:11在程序中经常会遇到不同类型的数据进行运算,如果一个运算符两侧的数据类型不同,则会先自动进行数据类型转换,使运算符两侧的数据类型相同,然后再进行运算,因此整型、实型、字符型数据间都可以进行混合运算 规律...在程序中经常会遇到不同类型的数据进行运算,如果一个运算符两侧的数据类型不同,则会先自动进行数据类型转换,使运算符两侧的数据类型相同,然后再进行运算,因此整型、实型、字符型数据间都可以进行混合运算
规律为:
(1)+、-、*、/、运算符两侧中有一个为float或double型,结果都为double型数据。
(2)如果 int型与float型数据进行运算,会先把int型和和float型数据转换为double型,然后再进行运算,结果是double型
(3)字符(char)型数据与整形数据进行运算,就是把字符型数据的ASCLL代码与整形数据进行运算。如:12+'A'等效于12+65结果为77,字符型数据与实型数据进行运算,则会将字符型的ASCLL代码转换为double型数据然后再进行运算。
以上的转换都是由编译器自动完成转换的,知道其转换的原理即可,不用自己进行转换。
-
不同数据类型混合运算及类型转换
2020-05-27 07:27:44**若两种类型的字节数不同,转换成字节数高的类型** 2. **若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型** 所有的浮点运算都是以双精度进行的,即使是两个float单精度量运算的表达式...1.类型装换
2.隐式转化
-
若参与运算的成员类型不同,则先转换成同一类型,然后进行运算
-
转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算
1. 若两种类型的字节数不同,转换成字节数高的类型 2. 若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
-
所有的浮点运算都是以双精度进行的,即使是两个float单精度量运算的表达式,也要先转换成double型,再作运算.
-
char型和short型参与运算时,必须先转换成int型
-
在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。
如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入
-
函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
-
函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。
3. 例子
unsigned int a = 30; int b = - 130; if ( a > b ) printf("a > b\r\n"); if ( a < b ) printf("a < b\r\n");
结果如下:
wll@wll-linux:~/code/test$ ./cal a > b
- 根据前面提到的规则:不同的运算要先转换为同一类型才能运算,短字节要转为长字节类型,长度相同时,有有符号转为无符号,所以-130转为无符号,将是一个很大的数。
unsigned short a = 0; unsigned int b = 0x12345678; a = b; printf("b:0x%x, a:0x%x\r\n", b, a);
结果如下:
wll@wll-linux:~/code/test$ ./cal b:0x12345678, a:0x5678
- 赋值运算等号右边的类型会转换为左边的类型,如果左边的类型比右边的短,则数据被截断后赋值
unsigned char test(unsigned short x) { printf("x: 0x%x\r\n", x); return x; } unsigned short a = 0; unsigned int b = 0x12345678; printf("a:0x%x\r\n", a=test(b));
结果如下:
wll@wll-linux:~/code/test$ ./cal x: 0x5678 a: 0x78
- 从结果可以看出“返回表达式类型转换为返回值类型”,函数参数传递的时候实参转换为形参的类型后,赋值给形参
5.代码误区
由于不熟悉不同类型间运算规则,导致的代码bug,大部分人应该都遇到过,举例如下:
unsigned int a = 1; unsigned int b = 100; for ( b; b-a >= 0; b--) { printf("b-a:0x%x\r\n",b-a); }
以上代码并不会按照预期运行,而是出现了死循环:
无符号数想减,结果永远是无符号数,而无符号数,是不会<0的,所以for循环不会通知。
保持语义不变的情况下可以改为如下:
for ( b; b >= a; b--) { printf("b:0x%x\r\n",b); }
另外,函数参数传递过程中的类型不一致导致的问题,也是层出不穷,待笔者日后遇到再进行补充
6.参考
https://www.cnblogs.com/weiyouqing/p/9090542.html
-
-
C语言不同数据类型间的混合运算转换规则+常见数据类型
2019-05-04 15:56:51在程序中经常会遇到不同类型的数据进行运算,若一个运算符两侧的数据类型不同,则先自动进行类型转换,使两者具有同一类型,然后进行运算,现将规律总结如下: 1. +. -. *. /运算的两个数中有一个数为float或double... -
不同数据间的混合运算
2020-08-18 21:58:06一个运算符两侧的数据类型不同,则先自动进行类型转换,使两者成为同一种类型,然后进行运算。 +,-,*,/ 运算的两个数中有一个数为 float 或 double 型,两个数据都将转换为double型,然后进行运算,结果是double... -
(笔记)不同数据间的混合运算
2016-10-21 19:21:56不同数据类型间的混合运算 -
C语言-不同类型数据间的混合运算
2015-08-05 14:40:051、如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型。 -
各类型数据之间的混合运算
2019-03-17 10:50:25自动转换即当不同类型的数据进行混合运算的时候,编译系统将会按照一定的规则自动完成。而强制类型转换是由程序员通过编程强制转换的数据类型。 自动转换的规则 1 当参加运算的数据的类型不同时,编译系统会自动将... -
C语言之第九课:C语言变量赋初值及不同类型数据之间的混合运算
2015-04-29 15:55:301、变量赋初值 2、不同数据类型之间的混合运算 -
C语言合运算不同类型之间的混合运算
2019-02-28 20:57:18+、-、*、/运算的两个数中有一个数为float或double型,结果为double型,因为系统将所有的float型数据转换为double类型数据再进行计算。 如果int型与float或double型数据进行计算,先把int型和float型数据转换为... -
3.4 混合运算中的数据类型的转换
2019-04-03 10:50:31在 C语言 中,数据类型的转换分为自动类型转换和强制类型转换两种方式。 3.4.1 自动类型转换 双目运算符两侧的操作数的类型必须一致,所得计算结果的类型与操作数的类型一致。如果一个运算符两边的操作数类型不... -
【转】C语言中的基本数据类型--数据之间的混合运算
2013-04-28 10:23:34一、自动转换:自动转换发生在不同数据类型的量运算时,由编译系统自动完成。 1.自动转换遵循的规则 (1)若参与运算的量的数据类型不同,则先转换成同一类型,然后进行运算。 (2)转换数据始终往长度增加... -
混合类型运算规则
2020-07-18 13:09:34在表达式遇到不同数据类型的混合运算时,要求不同类型的数据要先转换成同一类型然后才能进行运算。默认编译器会有个规则进行自动转换: 自动转换遵循以下规则: 1) 若参与运算的两个参数类型不同,则先转换成同一... -
变量类型、sprintf、不同类型之间的混合运算
2017-12-03 14:15:00char 默认signed char 取值范围-128~127 unsigned char 取值范围0~255 unsigned char = 0 与...sprintf 用于将即将要输出数据发送到输出缓冲区等待输出 转载于:https://www.cnblogs.com/scrazy/p/7966033.html... -
C语言不同数据混合运算时类型转换
2012-11-12 13:38:41有两个通用的指导原则: 1.为了防止数据精度损失,如果有必要的话,类型总是被提升为较宽的类型 2.所有含有小于整数类型的算术表达式在计算之前其类型被提升为整形数据类型 -
C语言小入门之第六篇【各类数值型数据之间的混合运算】
2020-07-13 20:48:581):自动转换(自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成) 自动转换遵循以下规则: 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 转换按数据长度增加的方向进行,以保证精度不... -
「C语言」数据类型及混合运算与类型转换
2016-01-23 14:30:00深入学习C语言时,有必要先了解一下数据类型的概念,以及它们之间的混合运算与类型转换。 本篇文章便是根据《C语言程序设计教程》和在线翻阅资料后整理而出。(练习题将逐步更新) 目录: 一、概述 二、... -
各类数值型数据间的混合运算
2010-04-21 14:55:12运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级,如下图: 转换规则为: ① (byte或 short) op int→ int ② (byte或 short或 int) op long→ long ③ (byte或 short或 int或 ... -
C语言中的整型提升与混合类型数据的运算
2015-04-02 17:17:12C中会根据操作数的不同,某些运算符会 引起操作数的值从一种类型转换为另一种类型。 一.关于整型提升 1. C语言之父的著作 K&R 中关于整型提升(integral promotion)的定义为: "A character, a short integer, or an... -
C++基础知识(三)--数据类型转换--混合运算类型转换--赋值类型转换--强制类型转换...
2019-01-10 11:49:00系统自动类型转换:混合运算的类型转换,赋值类型转换,强制类型转换 一、混合运算的类型转换规则 1.运算过程中,当某个二元运算符两边的操作数类型不同但属于类型相容时,系统先将精度低的操作数变换到与另一... -
各类数值型数据间如何混合运算?
2014-03-19 22:40:15整型(包括int,short,long)、实型(包括float,double)可以混合...在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则按图3.10所示。 图3.10 图中横向向左的箭头表示必定的转换,如字符数 -
《C语言程序设计与实践(第2版)》——3.5 各类数值型数据间的混合运算
2017-05-02 10:06:003.5 各类数值型数据间的混合运算 在C语言中,允许不同类型的数据之间进行某些混合运算。前面提到,字符型数据可以和整型通用。不仅如此,C语言还允许整型、单精度型、双精度型、字符型的数据之间进行混合运算。... -
运算函数_C|类型混合运算、赋值、函数传参和返回的转换及副作用
2021-01-09 12:01:41计算机有其强大的地方,但也有其本身的限制...不同类型数据的存储长度和存储方式不同,一般不能直接混合运算,需要进行类型的转换。例如:100+0.5100是整型,0.5是实型,二者存储形式完全不同,需要统一为一种类型 ... -
如何把一些不同类型的数据混合存入一片内存中_5分钟搞定数据类型和变量的关系...
2020-12-17 03:11:16变量和数据类型的关系在现实中,旅店的服务人员会询问要住什么样的房间,如:单人间、双人间、总统套间;然后,根据选择的房间类型,服务员会安排合适的房间。先开房间,后住 其实就描述了数据存入内存的过程。首先...
-
基于示例的图像修复的鲁棒伪造检测算法
-
对COPA和大理石认证的加密算法的几乎全盘伪造攻击
-
MySQL 触发器
-
1992-2013年DMSP夜间灯光数据已校正中国.zip
-
零基础一小时极简以太坊智能合约开发环境搭建并开发部署
-
联络人-源码
-
MySQL 函数、用户自定义函数
-
PHP能创造成功:旧代码不一定是遗留代码
-
MySQL 多实例安装 及配置主从复制实验环境
-
Python知识点.pdf
-
Jdk和Cglib的动态代理对象
-
记录JAVAMail发送附件的坑
-
用 AppContext 解决类库的更新兼容问题
-
vivado综合报错
-
项目管理工具与方法
-
MMM 集群部署实现 MySQL 高可用和读写分离
-
python-路径操作
-
Monocular Real-time Hand Shape and Motion Capture using Multi-modal Data.pdf
-
私域给企业带来的7大优势
-
MySQL 四类管理日志(详解及高阶配置)