IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2021-11-13 程序中提升数据类型 -> 正文阅读

[C++知识库]2021-11-13 程序中提升数据类型

C89标准:

整值提升:将出现的字符类型(char)和短整型(short)统一提升为int类型(特殊情况下,也会提升为unsigned int)
1.如果左右操作数中存在浮点值
?? ?(1) 如果一个操作数是long double,另一个操作数自动转换为long double
?? ?(2) 如果一个操作数是double,另一个操作数自动转换为double
?? ?(3) 如果一个操作数是float,另一个操作数自动转换为float ? ?
?? ?浮点值的优先级 ?long double > double > float
?? ?这一块操作数,浮点值和整形值混用
2.如果左右操作数中不存在浮点值?
?? ?(1) 首先整治提升(不要存在字符类型和短整型)
?? ?(2)? int < unsigned int < long < unsigned long
?? ?(3) 特殊:如果两个操作数大小相等,并且一个是unsigned int,另一个是long int,则两个全部转换为unsigned long int?

赋值语句: 左值大小 >= 右值大小 ?则自动转换
这里需要注意的点:
? ? ?① 如果左边操作数类型 存储不下 ?右边操作数的值,则很危险
?? ? ② 浮点值默认double,如果定义float a = 3.14; 会触发double转换为float,数据阶段
?? ? ③ 将浮点值赋值给整型值,会发生数据丢失(丢失小数点之后的数据)

C99标准

相较于C89,多了一些数据类型(bool,?long long int, 复数类型)

C99将所有整型类型分等级:从高到低
? ? ? ? ? ?①? long long int ? ? unsigned long long int
?? ??? ? ? ②? long int ? ?unsigned long int
?? ??? ? ? ③ ?int ? unsigned int
?? ??? ? ? ④ ?short int ? ? unsigned short int
?? ??? ? ? ⑤ ?char ?unsigned char ? signed char
? ? ? ? ? ?⑥? bool?

注意:在使用的时候,具体分两种情况:
① 操作数中带浮点值,和C89一致
②操作数中如果不带浮点值:(4个条件,从上到下触发,触发其中一个则退出)
? ? ? 第一、 如果两个操作数都是有符号类型或者都是无符号类型,小的向大的转化
? ? ? 第二、 如果无符号操作数类型 >= 有符号操作数类型,则有符号向无符号操作数转换
? ? ? 第三、? 2.3: 如果有符号操作数类型 > 无符号操作数类型,如果无符号操作数能表示的范围可以用有符号去表示,则无符号想有符号操作数转化
? ? ? 第四、 两个同时向有符号类型的无符号类型转化
? ?特殊:如果两个操作数大小相等,并且一个是unsigned int,另一个是long int,则两个全部转换? ? ? ? ? ? ? ?为unsigned long int (见以下代码)
③所有的类型都可以转化bool类型,如果值为0转化为false ? 要不然则为true
?

#include<stdio.h>
#include<typeinfo>
int main()
{
	char c;
	short s;
	unsigned short us;//unsigned short int us;
	int i;
	unsigned int ui;
	long l;
	unsigned long ul;
	float f;
	double d;
	long double ld;
	printf("%d\n", sizeof(c+s));//打印字节
    //打印类型,注意加提示头文件typeinfo
	printf("%s\n", typeid(c+s).name());//int
	printf("%s\n", typeid(c+us).name());//int
	printf("%s\n", typeid(s+us).name());//int
	printf("%s\n", typeid(us+i).name());//int
	printf("%s\n", typeid(i+ui).name());//ui
	printf("%s\n", typeid(i+l).name());//l
	printf("%s\n", typeid(ui+l).name());//unsigned long int
    /*注意,如果两个操作数大小相等,并且一个是unsigned int,一个是long,则两个全部转化为unsigned long
	printf("%s\n", typeid(l+ul).name());//ul

	printf("%s\n", typeid(f+s).name());//f
	printf("%s\n", typeid(f+c).name());//f
	printf("%s\n", typeid(f+i).name());//f
	printf("%s\n", typeid(d+ui).name());//d
	printf("%s\n", typeid(d+l).name());//d
	printf("%s\n", typeid(ld+s).name());//ld
	printf("%s\n", typeid(ld+i).name());//ld

	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:25:37  更:2021-11-14 21:29:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:02:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码