C++基础——数据处理

本文探讨了C++中数据处理的各个方面,包括变量类型(如char、signedchar、unsignedchar和宽字符),常量类型和长度,浮点数与算术运算,以及关键的类型转换和表达式处理。此外,还介绍了const限定符的作用和auto声明在简化代码中的应用。
摘要由CSDN通过智能技术生成

C++基础——数据处理

简单变量

cout特性

当需要切换输出八进制、十进制和十六进制整数时,可以通过控制符octdechex来进行控制:

cout << hex;
cout << 0x42;
cout << oct;
cout << 042;
cout << dec;
cout << 42;

这三个控制符只是修改了整数显示方式,并不会显示在打印界面中。

如果使用using name space std;声明命名空间,则不能再将上面三个控制符作为变量名,但是如果省略,而是用std::hex这种方式来修改输出方式,则可以用作变量名。

常量类型

类型

没有后缀时,采用能够存储此整型常量的最小类型。

也可以通过后缀控制存储方式:

后缀类型
uunsigned int
llong
ulunsigned long
ullunsigned long long

后缀可以采用任何一种顺序,大写小写均可。

长度

十六进制有些特殊,通常十六进制采用无符号类型,因为十六进制通常用来表示内存地址,内存地址是没有符号的。

char类型

char类型本身很简单,区分为常规字符和转义字符,在C语言和C++早期版本中,字符常量被视作int类型,存放在16位或32位单元中,当进行char ch = 'M'操作时,将整型常量M中的低8位存放到ch中。

因此cout保留了成员函数put,可以通过cout.put('$')来输出一个整型常量为字符。

但是后来C++将字符常量存储为charput方法也不是必要的了。

可以基于字符的八进制和十六进制编码来使用转义字符。

比如Ctr+Z的ASCII码为26,对应八进制编码为032,对应十六进制编码为x1a,则可以用\032\xla来表示。

signed char和unsigned char

默认情况下char可能没有符号,也可能有符号,由C++实现决定。

可以通过signed charunsigned char显式声明。

wchar_t

当处理的字符集无法用8位字节表示时,可以使用wchar_t扩展字符集来表示。

wchar_t类型是一种整数类型,由于cincout使用的是char流,想要处理wchar_t类型可以使用wcinwcout来完成。

wchar_t有一个底层类型,底层类型即基于某个基本类型,它的长度取决于实现。

char16_t和char32_t

wchar_t随实现的不同长度不同,为了解决这个问题,引入了新的类型char16_tchar32_t

前者字符常量或字符串常量使用u前缀标识:u'C'

后者字符常量或字符串常量使用U前缀标识:U'C'

const限定符

const限定符用于处理常量,以const限定的变量仅唯一表示初始化时的值,此后不能对其进行修改。

const相比于#defineconst有很多好处:

  • 能够明确指定类型
  • 可以使用作用域规则将定义限制在某个特定作用域
  • 可以用于复杂类型

浮点数

浮点数表示的范围要比整型大得多,但是运算速度和精度都会相应降低。

浮点数常量默认情况下存储为double类型,若添加后缀f则可存储为float类型,若添加后缀L可存储为long double类型。

C++算术运算符

类型转换

类型转换是C++中很重要的概念。当赋值时类型不同,或不同类型数据运算时,都涉及到类型转换。一般的类型转换将取值范围小的类型转换为取值范围大的类型,若整型和浮点型同时存在则将整型转换为浮点型。

初始化和赋值中的转换

当我们将取值范围小的类型赋值给取值范围大的类型通常没问题,但是反之可能出现问题。

当大范围转换为小范围时对大范围的数值进行截断,即只取小范围数据的那部分。

若将浮点数转换为整型可能出现浮点数超出整型可表示范围,此时的结果是不确定的,基于不同的实现而不同。

表达式中的转换

在计算表达式时,通常将比int类型小的类型转换为int类型然后进行计算,这种转换成为整型提升

当不同类型之间进行转换时通常将小类型转换为大类型。

  • 如果有一个操作数的类型是long double,则将另一个操作数转换为long double
  • 否则,如果有一个操作数类型为double,则将另一个操作数转换为double
  • 否则,如果有一个操作数为float,则将另一个操作数转换为float
  • 否则,说明操作数都是整型,执行整型提升
  • 在这种情况下,如果两个操作数都是有符号或者无符号的,且其中一个操作数的级别比另一个低,则转换为级别高的类型(通常指大小)
  • 如果一个操作数为有符号的,另一个为无符号的,且无符号的操作数的级别比有符号操作数高,则将有符号操作数转换为无符号操作数所属的类型
  • 否则,如果有符号类型可表示无符号类型的所有可能取值,则将无符号操作数转换为有符号操作数所属的类型
  • 否则,将两个操作数都转换为有符号类型的无符号版本
强制类型转换

强制类型转换不会修改变量本身,而是创建一个新的、指定类型的值,可以在表达式中使用这个值

有两种格式:

(typeName) value;
typeName (value);

在C++中通常使用第二种格式,为的是让强制类型转换看起来更像是一个函数调用。

auto声明

auto时C++11中新增的工具,但是很少使用。

它的作用是让编译器自动识别变量类型,用作基本类型时会比较鸡肋,但是在使用STL时使用auto会非常好用。

这部分会在STL部分详细解释。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值