C++ 简单数据类型--整型,浮点型,bool,char

1. 面向对象编程的本质是设计并拓展自己的数据类型

2. C++的命名规则 在这里插入图片描述

3. 数据类型(C语言中有的内容不做记录)

	a. 整型
		i. 自然世界的整数可以是无限大,但是在计算机不可能用所有的的内存来存储整数,所以及计算机所能表示的整数是所有整数的
		   一个子集
		ii. short、int、long、long long(在某编译器及其使用的资源情况下)
			1) short至少16位
			2) int至少和short一样长
			3) long至少32位,且至少和int一样长
			4) long long至少64位,且至少和long一样长
		iii. 字节的定义
			1) 通常一字节等于8位的内存单元
			2) 但是C++字节的定义与此不同,C++字节至少能够容纳实现的基本字符集的相邻位组成,可能取值的数目取决于实现(在我的环
			   境中是每个字节8位)
		iv.climits头文件中包含了关于整型的限制信息,可以获得每种数据类型的最大(最小)值

在这里插入图片描述

		v. C++语言中的新增的初始化方式
			1) int wrens(432);//将wrens初始化为432
			2) 使用大括号初始化器(可以对数组、结构、单个值等进行初始化)
				® int x={78};或者  int x{78};等号可选
				® 大括号内可以不包含任何东西,则变量将会被初始化为0;
			3) 总结:新增的大括号初始化器使得大括号初始化器可以适用于任何类型(等号可用可不用)
		vi. 整型数据的选择:
			□ 和C语言中的情况相同,int类型是目标计算机最为自然的长度---是计算机处理起来效率最高的长度。没有具有说服力的理由
			  选择其他数据类型时就应该使用int类型。
			□ 如果只是用一个字节应该选择使用char类型
		vii. 整型字面值
			1) 十进制(decimal)
				® 0-9开头
			2) 八进制(octal)
				® 0开头;例如023、076、087
			3) 16进制(hex)
				® 0x开头;例如0xa2、0x96、0xef
			4) 不管用什么形式输入进入计算机,在计算机中都以二进制储存数据
			5) 默认情况下,cout对象以10进制类型显示数据,而不管数据在程序中是以什么形式书写的
			6) cout<<hex;cout<<oct;可以帮助cout以16进制、8进制显示数据
		viii. C++如何确定字面常量的类型呢?
			1) 除非有理由(如下所述)存贮为其他类型,否则均以int类型存储
			2) 有特殊的后缀表述常量的类型
				® L--long、LL--long long、ULL--unsigned long long、UL--unsigned long(不区分大小写)
			3) 值太大,无法存储为int
	b. char类型:字符和小整数
		i. 存放字符
		ii. 存放小整数
		iii. cin和cout对象的行为是数据类型主导的,对于char类型,其会自动的按照char类型进行存储和显示(如屏幕输入‘M’计算机存储为
		     M的ASCII码,若是输出M的ASCII码,会自动转换为字符‘M’)
		iv. 成员函数简介(cout.put())
			□ 类定义了如何表示数据和控制数据,成员函数归类所有,描述了操纵类数据的方法
			□ 只能通过类的特定对象才可以使用成员函数
			□ cout.put('M')输出M;   cout<<'M'; 输出也为M
		v.转义序列

1))
在这里插入图片描述

			2) 万能的反斜杠\
			3) 应该像使用普通字符一样使用转义字符
				a) cout.put('M');//输出M         cout.put('\n');//换行动作,另起一行
				b) cout<<'M';//输出字符M         cout<<'\n';//换行动作,另起一行
				c) cout<<"M";//输出字符串M       cout<<"\n";//换行动作,另起一行
				d) cout<<endl;(因此现在已经有了4种换行的方式)
		vi. char的符号?
			1) 默认情况下既不代表有符号,也不代表无符号(存放ASCII码)
			2) signed char   有符号8位字节(-128到127)
			3) unsigned char   无符号8位字节(0到255)
	c. bool类型
		i. 新增了bool类型,true和false字面量
	d. const类型限定符表示常量
		i. 在C++中提倡尽量使用const来定义常量而不是使用预处理器指令#define
		ii. 好处是const定义的常量的作用域更加灵活,并且可以明确指出数据类型
	e. 浮点数
		i. 计算机中存储浮点数类似下述的e表示法(以2进制为基础)
			1) 一部分是值
			2) 另一部分是缩放因子
		ii. 浮点数的两种表示法可以让计算机知道这是一个浮点数
			□ 标准小数点表示法
				® 1.23
				® 3.99
				® 9.0
				® 0.67598
			□ e表示法(通常用于表示比较大或特别小的数字)

在这里插入图片描述

			□ 此表示法不允许有任何空格(正确示例如下)
				® 0.345e12=345000000000
				® 2.98e3=2980
				® 3.456e-3=0.003456
		f. 浮点类型
		i. float:有效位数至少32位
		ii. double:有效位至少48位,且不少于float
		iii. long double:有效位至少和double一样
		iv. 指数范围至少是-37到37
		v. cfloat头文件中包含了系统对浮点数的限制
		vi. cout一般打印6位有效数字
		vii. 程序中的浮点常量计算机一般会怎么存储为那种形式?
			1) 默认情况下,浮点数都存储为double类型
			2) 如果存在F或L则存储为float或long double类型(不区分大小写)
		viii. 浮点数的两大优点与不足
			1) 优点
				a) 可以表示整数之间的数
				b) 可以表示的范围很大
			2) 不足
				a) 运算速度慢
				b) 精度会降低(例如float只能表示数字前6到7位(也即float只保证前6位数据的准确性),所以修改7位以上的数时,会不起
				   作用)(在计算机看来,两数相同)

4. C++运算符

	a. 加减乘除和C语言一样
	b. 注意:%求模运算符的操作数只能是整数,浮点数将出现编译错误
	c. 除法分支
		i. 如果两个操作数都是整数,则结果会是整数,丢弃小数部分,即使小数部分还有值
		ii. 如果有一个操作数是浮点数,则结果就会是浮点数,即使小数部分为0
		iii. 如果两个操作数均为float,则结果是float
		iv. 如果有一个double和一个整型相除,则结果为是double类型
		v. 如果一个整型和float相除,结果是float类型
	d. 由上述的各种情况可以看出/运算符的重载特性

5. 类型转换

	a. 将一个值赋给取值范围更大的类型时通常不会有什么问题,最多就是多暂用一些内存
	b. 但是反之将出现许多潜在的问题:

在这里插入图片描述

	d. 0转化为bool类型为false;非0值转化为bool类型为true
	e. 以{ }进行初始化时:比较严格
		i. { }中的值必须可以正确的放进目标变量(因为需要保证赋值之后的数据正确性)
		ii. 例如整型可以赋值给浮点型;浮点型不可以赋值给整型
		iii. 整型之间也可以相互赋值,比如long型赋给int,只要long型的值赋给int后不改变其精度即可
	f. 表达式中的类型转换
		i. 整型提升(bool、char、unsigned char、signed char、short会被自动转换为int进行数据计算,之后将结果再转化为需要的类型)因为
		   int是计算机中运算速度最快的方式
		ii. 表达式中不同的类型,也会进行类型转换
			□ 在C++中浮点数,按照级别,一般低级别转型为高级别(long double-->double-->float)
			□ 如果不存在浮点数,则进行整型提升
			□ 此时,如果两个操作数都是有符号,或者无符号,则低级别的转化为该级别的类型
				® long + int-->>long + long;  
				® unsigned long + unsigned int -->>unsigned long + unsigned long 
			□  一个操作数为有符号数,另一个操作数为无符号数,且无符号数的级别高于有符号数,则将有符号数转化为无符号数的级别
				® unsigned long + int--> unsigned long + long
			□ 一个操作数为有符号数,另一个为无符号数,且有符号操作数可以完全正确的表示无符号数,则将无符号数转化为有符号数所处的类型
				® long(假如是64位)+ unsigned int(32位)-->long + long 
			□ 否则两者都转化为有符号数所在的无符号类型
				® long(32位)+ unsigned int(32位)-->unsigned long + unsigned long 
	g. 强制类型转换(两种格式)
		i. C语言的传统格式
			1) (typename) value//将value转化为typename类型
			2) (double)2.34;
		ii. C++特有的格式(让强制类型转化更像函数调用
			1) typename(value)//将value转化为typename类型
			2) double(2.34);
		iii. 强制类型转换并不改变原数值,而是另创一个副本
		iv. 4个强制类型转换运算符
			1) static_cast<typename>(value)
	h. C++11中的auto声明
		i. 让编译器能够根据初始值的类型推断变量的类型
			□ auto n = 1;   //n是int型
			□ auto m = 1.0; //n是double型

6. 总之:按照整型能够表大的最大值进行排序(由小到大)

	a. bool-->char-->unsigned char-->signed char-->short-->unsigned short-->int-->unsigned int-->long-->unsigned long-->
	   long long-->unsigned long long 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡与乌龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值