重学C++笔记之(二)处理数据

1. 基本数据类型

七种基本的C++数据类型:bool、char、int、float、double、void、wchar_t。
类型修饰符:signed、unsigned、short、long、long long。

如果想知道类型或者变量的大小可以通过下列的方式。

#include <iostream>
using namespace std;
int main()
{
    
    
    cout<<"bool:"<<sizeof(bool)<<endl
       <<"char:"<<sizeof(char)<<endl
      <<"float:"<<sizeof(float)<<endl
     <<"double:"<<sizeof(double)<<endl
    <<"long:"<<sizeof(long)<<endl
    <<"long long :"<<sizeof(long long)<<endl;
    return 0;
}

输出如下:

bool:1
char:1
float:4
double:8
long:8
long long :8

2. 整数字面类型

C++能够以三种不同的计数方式来书写整数:基数为10、基数为8(老式UNIX版本)、基数为16(硬件黑客的最爱)。

以42为例:他们对应的书写方式为42,042和0x42(或0X42),10进制含义分别表示为42,34和66。

程序表示如下:

#include <iostream>
using namespace std;
int main()
{
    
    
    int num10 = 42;//十进制
    int num8 = 042;//八进制
    int num16 = 0x42;//十六进制
    cout<<num10<<endl
       <<num8<<endl
      <<num16<<endl;
     return 0}

3. char类型和wchar_t

3.1 char

char专门为存储字符而设计的。对于计算机来说,存储数字已经不算什么,但存储字母又是另外一回事。编程语言使用字母的数值编码解决了这个问题,因此,char类型是另一种整形。

它可以表示128个字符,采用ASCII编码,具体形式见课本附件C。例如字符A的编码为65,字母M的编码为77。

char的输出方式有两种,cout和cout.put,后者专用于char输出,他们的输出都是char对应的字符。如需输出对应编码,可以转换为int类型。代码如下。

#include <iostream>
using namespace std;
int main()
{
    
    

    char ch = 'A';
    cout<<ch<<endl;
    cout.put(ch);
    int intA = ch;
    cout<<endl<<intA<<endl;
    return 0;
}

输出为:

A
A
65

3.2 转义字符

有些字符不能通过键盘输入到程序中。例如,按回车键并能使字符串包含一个换行符。对于特殊字符,C++提供了一种特殊的表示方法——转义序列。转义序列可以在字符常量或者字符串中使用。如

#include <iostream>
using namespace std;
int main()
{
    
    
    char alarm = '\a';//表示振铃
    int intAlarm = alarm;
    cout<<intAlarm<<endl;
    cout<<"他说:\"大家好!\""<<endl;
}

输出:

7
他说:"大家好!"

在这里插入图片描述
根据上表显示,我们可以知道"\n"和“\012”(八进制),“\0xa”(十六进制)都表示换行。
测试代码:

#include<string>
#include<iostream>
using namespace std;
int main()
{
    
    
    cout<<"test1\012";
    cout<<"test2"<<"\0xa";//用QT测试,这里16进制好像有一点问题?
    cout<<"test3\n";
    cout<<"test4"<<endl;
}

3.3 signed char和unsigned char

与int类型不同的是,char在默认情况下既不是没有符号,也不是有符号。如果需要特殊选定,则可以人工添加类型。

unsigned char表示0~255,而signed char表示-128~127.

3.4 通用字符名

例如法语的特殊符号就很难在ASCII中表示出来,于是我们就有了Unicode和ISO 10646编码,他们两者的编码是同步的。

通用字符名可以用\u:后面接8个16进制位。\U:后面接16个十六进制位。如:

int k\u00F6rper;

在这里插入图片描述

3.5 wcha_t

在国际上,128位不能很好地满足国际需要,C++支持宽字符类型,可以存储更多的值,如国际Unicode字符集。

cin和cout将输入和输出看做char流,因此不适用于wchar_t。iostream提供了相似的工具wcin和wcout。

本书不介绍wchar_t,但是我们应该知道这种类型,尤其是在Unicode和ISO10646时。

C++新增了char16_t和char32_t类型,他们分别为无符号的16位和无符号的32位。在C++11中使用分别使用前缀加u和前缀加U表示。如:

#include <iostream>
using namespace std;
int main()
{
    
    
    char16_t ch1 = u'q';
    char32_t ch2 = U'\U0000222B';
    cout<<ch1<<endl;
    cout<<ch2<<endl;
    return 0;
}

输出为:

113
8747

4. bool类型

bool可以和int互相转换,int的非0即为true,0则为false。例如

   int ans =true;//转换为1
   int promise =false;//转换为0
   bool start = -100;//转换为true
   bool stop = 0;//转换为false

5. define与const限定符

  • #define
#define INT_MAX 32737

#define类似于#include,也是一个预处理编译指令,在程序中查找INT_MAX,并将所有的INT_MAX替换成30767,修改后的程序将在完成替换后被编译。

#define是C语言遗留下来的,在C++中,有一个更好的创建符号常量的方法const。但是有些头文件,被设计成可用于C和C++中的头文件,则必须要用#define了。

  • const

const是C++中提供的限定常量的关键字,它比define更好。原因如下:

  • 它能够明确指定类型。
  • 可以使用C++的作用域规则将定义限制在特定的函数或文件中。
  • 可以将const用于更复杂的类型,比如数组和结构体。

6. 初始化

注意C++11中的初始化("{}"表示的初始化),不可以进行缩窄操作,例如不允许浮点型转换为整型。

int A =100;//c语言初始化
int A(100);//C++初始化
int A{
    
    100};//C++11初始化
int A = {
    
    100};//C++11初始化

7. 浮点类型

浮点类型在计算机中分两部分存储,一部分表示值,另一部分表示放大或缩小。例如3.1415926和3415.926除了小数点的位置不同外,其他相同。3.14表示为0.314(基准)和10(缩放因子)。

C++中有三种浮点类型:float、double和long double。

7.1 两种表示方式

  • 标准小数点法:
    12.34
  • E表示法
    2.52e+8或者2.52E+8//表示10的8次方
    2.52e-8//表示10的-8次方

d.ddE+n:表示小数点右移8位,d.ddE-n表示小数点向左移8位。

7.2 浮点数的优缺点

  • 优点
    可以表示整数之间的值
    具有缩放因子

  • 缺点
    浮点运算的速度通常比整数运算慢,且精度将降低。下面举例说明。

#include <iostream>
using namespace std;
int main()
{
    
    
   float a = 2.34E+22f;
   float b = a + 1.0f;

   cout<<"a = "<<a<<endl;
   cout<<"b - a ="<<b - a<<endl;
}

输出结果:

a = 2.34e+22
b - a =0

因为2.34E+22是一个小数点左边有23位的数字。加上1,就是在第23位加1。但是float类型只能表示数字中的前6位或者7位,因此修改第23位对这个值没有影响,所以输出不变。

8. C++算数运算符

C++中提供了5种算数计算:加法、减法、乘法、除法以及求模。(+ - * / % )

另外C++中还有自加自减运算符:++和–

8.1 类型转换

强制类型转换的两种表示:

(long) thorn
long (thorn)

其中thorn本身不会被改变,而是创建一个新的、指定类型的值。

C++还引入4个强制类型转换运算符。将在后续介绍补充。

8.2 C++11中的auto声明

auto是C语言的关键字,但很少使用。C++11对它进行了扩展。它的作用是让编译器根据初始值的类型推断变量的类型。例如:

auto n = 100;//n表示int
auto x = 1.5;//x表示double

又如:

std::vector<double> scores;
auto pv = scores.begin();

总览目录
上一篇:(一)基础介绍
下一篇:(三)复合类型


文章参考:《C++ Primer Plus第六版》

猜你喜欢

转载自blog.csdn.net/QLeelq/article/details/112269803