第三章 处理数据

本章内容

  • C++变量的命名规则
  • C++内置的整型:unsigned long <—> long、unsigned int<—> int 、 unsigned
    short<—> short、 unsigned char<—> signed char,char 、 bool
  • C++11新增的整型:unsigned long long 和 long long
  • 表示各种整形的系统限制的climits文件
  • 各种整型的数字字面值(常量)
  • 使用const限定附来创建符号常量
  • C++内置的浮点类型: float、double、long double
  • 表示各种浮点类型的系统限制的cfloat文件
  • C++的算术运算符
  • 自动类型转换
  • 强制类型转换

3.1 简单变量

为把信息存储在计算机中,程序必须记录3个基本属性:

  • 信息存储在何处
  • 存储什么值
  • 存储何种类型的值

C++的解决办法:声明变量

3.2 整型

	C++的基本整型按宽度递增的顺序排列:char、 short、 int、 long、 long long。
每种类型都有符号版本和无符号版本,共10种类型。
  • 查看C++中各种整型在系统中的最大常数,可以在程序中使用C++工具来检查——climits中的符号常量。具体参见:climits中的符号常量
  • 运算符sizeof:对类型名(如int)使用 sizeof 时,应将名称放在括号中;对变量名使用 sizeof
    时,括号可省,如sizeof n_short
    计算数组长度:sizeof(array),计算数组元素个数 sizeof(array) / sizeof(typename)
  • 初始化:将声明和赋值合并在一起。
  • C++11新初始化方式,常用于数组和结构,也可用于单值变量:
    — int cat = {24}; //cat 为24
    — int emus{7}; //等号可省
    — int psys{}; 或者 int psys = {}; //赋值为0

无符号类型

格式: unsigned typename variable;

	对于无符号变量,如果超越了限制,其值将为范围另外一端的取值。

unsigned short sue = 32767;
short sam = 32767;
sue 加 1 为 32768,sam 加 1 为 -32768

整型字面值(常量)

C++有三种不同的计数方式:基数10、基数8、基数16。

  • 十进制:第一位为1~9,如93;

  • 八进制:第一位为0,第二位为1~7,如042;

  • 十六进制:前两位为 0x or 0X,如0x42;

     在默认情况下,cout以十进制格式输出。
    

iostream 也提供了三种计数方式的控制符:dec(十)、hex(八)、oct(十六)。

......
	cout << "chest = " << chest;
	cout << hex;
......	

char类型:字符和小整数

	char类型是专为存储字符而设计的
  • 书写字符字面值:如ch = ‘M’,将符号用单引号括号括起。(C++对字符用单引号,对字符串用双引号)
  • 上面 ch 是一个整数,可以对其使用整数操作,如加 1
  • 函数cout.put() 显示字符常量,如 ch = 78,cout.put(ch) 将显示 N 。此外,要通过成员运算符(句点:“ . ")来使用对象(如cout)中的成员函数。
  • 转义序列:\n 表示换行,具体见:C++转义序列的编码

bool类型

表示真和假,它们分别用预定义的字面值true和false表示。

const限定符

const关键字用来修改变量声明和初始化,功能类似于 #define 语句。
如const int Month = 12; //首字母大写以提示Month是常量

3.3 浮点数

	浮点数可以表示带小数部分的数字

在计算机将,将浮点数分成两部分存储:
浮点数 = 基准值 * 缩放因子。如 34.1245 = 0.341245 * 100
缩放因子的作用是移动小数点的位置。(C++内部缩放因子是二进制数)
浮点数的两种写法:1.标准小数点表示法,如12.34、0.0023等;2.E表示法,如2.52e+8、8.33E-4。

	浮点类型(按宽度递增的顺序排列):float、double、long double

系统中对浮点型数据的位数限制,可以从cfloat中找到。

  • cout会删除浮点数据结尾的0,但调用cout.setf()会强迫输出使用定点表示法,防止程序把较大的值切换为E表示法

浮点常量

  • 浮点常量在默认情况下都是double型
  • float后缀:f、F
  • long double后缀:l、L

浮点数的优缺点

与整形相比
优点

  • 能够表示整数之间的值
  • 由于缩放因子,可以表示更大的范围

缺点

  • 运行速度慢
  • 计算精度降低

3.4 C++算术运算符

	5种基本运算符:加法(+)、减法(-)、乘法(*)、除法(/)、求模(%)。

每种运算符(操作符)都需要两个操作数,运算符及其操作数构成了表达式。

  • 算术运算符遵循代数优先级:先乘除、后加减
  • 仅当两个运算符被用于同一个操作数,优先级结合性规则才有效
  • 除法运算符的行为取决于操作数类型:整数 / 整数 = 整数,小数部分被丢弃;操作数其一是浮点数,结果为浮点数
  • 对不同类型进行运算时,C++将把他们转换为同一类型
  • 求模(%)运算符返回整数除法的余数

类型转换

  • 将一种算术类型的值赋给另一种算术类型的变量时,C++将对值进行转换
  • 表达式中包含不同的类型时,C++将对值进行转换
  • 将参数传递给函数时,C++将对值进行转换
转换潜在的问题
较大浮点型转换为较小浮点型,如double -> floatcentered 精度降低,值可能超出目标类型的取值范围,导致结果不确定
浮点类型转换为整型小数部分丢失,原值可能超出目标类型的取值范围,导致结果不确定
较大整型转换为较小整型,如 int -> short值可能超出目标类型的取值范围,通常只复制右边的字节
  1. 以{}方式初始化时进行的转换(C++11)
    C++将使用大括号{}的初始化称为列表初始化,因其常用于给复杂的数据类型提供值列表。
    列表初始化不允许缩窄:即变量的类型可能无法表示赋给它的值,如 char c1 {31325}

  2. 表达式中的转换
    -如果有一个操作数的类型是long double,则将另-个操作数转换为long double
    -否则,如果有一个操作数的类型是double,则将另一个操作数转换为double
    -否则,如果有一个操作数的类型是float,则将另一个操作数转换为float
    -否则,说明操作数都是整型,因此执行整型提升
    -在这种情况下,如果两个操作数都是有符号或无符号的,且其中一个操作数的级别比另一 个低,则转换为级别高的类型
    -如果一个操作数为有符号的,另一个操作数为无符号的,且无符号操作数的级别比有符号操作数高,则将有符号操作数转换为无符号操作数所属的类型
    -否则,如果有符号类型可表示无符号类型的所有可能取值,则将无符号操作数转换为有符号操作数所属的类型
    -否则,将两个操作数都转换为有符号类型的无符号版本

  3. 传递参数时的转换
    传递参数时的类型转换通常由C++函数原型控制。

  4. 强制类型转换
    C++允许通过强制类型转换机制显式地进行类型转换。强制类型转换地格式有两种:
    -(typename) value; //来自c语言
    -typename (value); //来自C++

C++11中的auto声明

auto是一个C语言关键字,在初始化声明中使用auto,而不指定变量类型,编译器将把变量的类型设置成与初始值相同。如:
auto x = 0.0; //x为double型
auto z = 0; //z为int型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值