第03章 处理数据

3.1 简单变量

C++命名规则

  • 只能使用字母字符、数字和下划线(_)
  • 第一个字符不能是数字
  • 区分大小写
  • 不能是关键字
  • 以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用
  • 不能超出平台的限制

初始化,注意大括号初始化器 {} 的使用

int owls = 10;
int owls(10);   // C++ 特性
int owls = {10};    // C++98 以后
int owls{10};
int owls{}; // 初始化为 0

各类整型的最大最小值限制,在头文件 climits(limits.h)

#pragma once
#define _INC_LIMITS

#include <vcruntime.h>

_CRT_BEGIN_C_HEADER

#define CHAR_BIT      8         // number of bits in a char
#define SCHAR_MIN   (-128)      // minimum signed char value
#define SCHAR_MAX     127       // maximum signed char value
#define UCHAR_MAX     0xff      // maximum unsigned char value
...

整型字面值

int chest = 42; // 十进制
int waist = 042;    // 八进制
int inseam = 0x42;  // 十六进制

3.2 const 限定符

const#define 在声明常量上的不同

  • 明确指定类型
  • 使用C++作用域规则,限制使用范围
  • const用于更复杂的类型,比如数组和结构

3.3 浮点数

浮点类型精度问题

类型位数有效位数数值范围
float326-7-3.4*10(-38)~3.4*10(38)
double6415-16-1.7*10(-308)~1.7*10(308)
long double12818-19-1.2*10(-4932)~1.2*10(4932)
float a = 2.34E22f;
float b = a + 1.0f;
cout << b-a << endl;    // 0 float 有效位数6-7,改变第23位不影响结果的精确度

浮点常量默认情况下被认为 double 类型

1.234f      // float
1.23E20F    // float
1.23456E20  // double
1.234L      // long double

doublefloat 的区别是 double 精度高,有效数字 16 位,float 精度 7 位。但 double 消耗内存是 float 的两倍,double 的运算速度比 float 慢得多,C 语言中数学函数名称 doublefloat 不同,不要写错,能用单精度时不要用双精度

3.4 运算符

  • 符号优先级
  • 同优先级同一操作数,从左至右结合
  • 同优先级不同操作数,由实现决定结合顺序

求模运算 % 不能用于浮点数,如果其中一个是负数,结果的符号满足规则 (a/b)*b+a%b=a

3.4.4 类型转换

下列情况下可能会发生类型转换

  • 不同算数类型赋值
  • 表达式包含不同类型
  • 函数传参

初始化和赋值时进行的转换,将取值范围大的类型赋值给取值范围小的类型会有潜在问题。

  • 精度降低
  • 小数部分丢失,截断
  • 值超出表示范围,结果不确定

{} (列表初始化)方式初始化时进行的转换,对类型转换要求更加严格,不允许缩窄

const int code = 66;
int x = 66;
char c1 {31325};    // 缩窄 不允许
char c2 = {66};     // 在范围内
char c3 {code}      // 同上
char c4 = {x};      // 不允许 x 被认为是变量 与 code 不同
char c5 = 31325;    // 允许,要求不严格

表达式中的转换

  1. 如果有一个操作数类型是long double,则将另一个操作数转换为long double
  2. 否则,如果有一个操作数的类型是double,则将另一个操作数转换为double
  3. 否则,如果有一个操作数的类型是float,则将另一个操作数转换为float
  4. 否则,说明操作数都是整型,因此进行整型提升
  5. 如果两个数都是有符号或者无符号,且操作数级别不同,则转换为级别高的类型
  6. 如果一个有符号一个无符号,且无符号操作数级别高,则转换为其所属类型
  7. 否则,如果有符号类型可表示无符号所有的值,则转换为有符号操作数的类型
  8. 否则,两个操作数都转换为有符号类型的无符号版本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sqoop 是 Apache Hadoop 生态系统中的一个工具,用于在 Hadoop 和结构化数据存储之间进行数据传输。Sqoop 可以将结构化数据(如关系型数据库中的数据)导入到 Hadoop 中的 HDFS 或 Hive 中,也可以将数据从 Hadoop 导出到结构化数据存储中。使用 Sqoop 进行数据导入导出的步骤如下: 1. 安装 Sqoop:下载 Sqoop 的安装包并解压,配置环境变量。 2. 连接到数据源:Sqoop 支持连接到多种数据源,如 MySQL、Oracle、PostgreSQL 等。 3. 导入数据:使用 Sqoop 的 import 命令将数据数据源导入到 Hadoop 的 HDFS 或 Hive 中。 4. 导出数据:使用 Sqoop 的 export 命令将数据从 Hadoop 导出到数据源中。 Hive 是基于 Hadoop 的数据仓库工具,它提供了类 SQL 的查询语言 HQL,可以将结构化的数据文件映射成一张数据库表,并提供了丰富的数据分析功能。使用 Hive 进行数据处理和分析的步骤如下: 1. 安装 Hive:下载 Hive 的安装包并解压,配置环境变量。 2. 创建数据库:使用 Hive 的 create database 命令创建数据库。 3. 创建表:使用 Hive 的 create table 命令创建表,可以指定表的列名、数据类型等属性。 4. 加载数据:使用 Hive 的 load data 命令将数据加载到表中。 5. 执行查询:使用 Hive 的 select 命令执行查询操作,可以对表进行聚合、排序、过滤等操作。 6. 保存查询结果:使用 Hive 的 insert 命令将查询结果保存到表中或导出到文件中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值