C++ Primer Plus第三章学习笔记

目录

前言

3.1 简单变量

3.3.1变量名

3.1.2 整型

3.1.3 整型short、int、long和long long 

3.1.4 无号类型

3.1.5 选择整型类型

3.1.6 整型字面值

3.1.7 如何确定常量类型

3.1.8 char类型 字符和小整数

3.2 const限定符

3.3 浮点型

3.3.1 书写浮点数

3.3.2 浮点类型

3.3.3 浮点常量    

3.4 C+共有五种运算符:加法 减法 乘法 除法 求模


 

前言

面向对象编程的本质是设计并扩展自己的数据类型。设计自己的数据类型就是让类型和数据匹配。

内置的C++类型分为两组:基本类型和复合类型。基本类型为整数和浮点数,复合类型为数组、字符串、指针和结构体。本讲将学习基本类型

 

3.1 简单变量

程序通常需要存储信息,到目前为止本书是通过声明一个变量进行的。声明中使用的类型描述了信息的类型和通过符号来表示其变量名。可以通过&获取当前信息存储的内存地址。

 

3.3.1变量名

变量名其实只要符合规定即可,但最好用有一定的含义:

2989fc7b5542470f992b22ef5353290d.png

 

3.1.2 整型

不同C++整形使用不同的内存量来存储整数,内存量越大整数的范围越大,术语宽度用于描述内存量。

C++的基本类型分别是char, short ,int ,long 和 long long 每种又都分为有符号类型和无符号类型,所以共有10种

 

3.1.3 整型short、int、long和long long 

计算机内存的基本单位是bit(位)。byte(字节)通常指的是8位的内存单元。

在不同的系统中每种类型的长度不同,但对最小长度有所限制:

5b9487c706e3492fb0a41d9d8f0be3ac.png

 当前很多系统都使用最小长度,即short16位,long32位。在老式IBM PC中int为16位,在Windows XP 、Windows 7、Macintosh OS X、VAX和很多其他微型计算机的实现中int为32位。

int long shrot 和long long都是符号类型,即:包括正负值两部分。如16位的shrot为-32768 (2^16/2)到 +32767(2^16/2-1)。

 

  • 运算符sizeof与头文件limits

头文件climits定义了符号常量来表示类型的限制:a8530a5101f64566824efda5e5d7d879.png

cca7dc86232c4704ba7cc6f979079659.png

  • 初始化

初始化是将赋值和声明合并在一起:

int a; //声明
a = 5; //赋值

int a = 5; //初始化

C++独有的初始化方法为不适用赋值运算符=使用括号():

int  num = 5; //c和c++通用的初始化方法

  等价于

int num(5); //c++独有的初始化方法

在C++11中还可以将大括号{}用于初始化:

int num{5};//使用大括号初始化

int num = {5};//使用大括号的同时也可以使用=

int num = {};//大括号内容为空,代表初始化为0

 

3.1.4 无符号类型

前面说的4种整型都有对应的无符号类型,无符号类型即没有了负数值,扩大了正数的范围,比如16位的short就是0-65535.

创建无符号类型需要使用unsigned来声明:

unsigned nun = 1;//初始化变量num为无符号整型,值为1

预处理语句#define用来定义全局变量,也叫做宏。该值在程序中可直接作为常数使用

#include<iostream>
using namespace std;

#define num 1;//预定义num为1

int main()
{
    int a = num;
    cout << "a: " <<endl; 
}

/*
输出结果:
a: 1
*/

 

3.1.5 选择整型类型

当没有确定的理由选择整型类型时,使用int整型。

当确定变量没有负值的情况下,使用无符号类型。

当确定变量表示的值大于16位整数的最大值,使用long。

当确定存储的值大于20亿,使用long long。

当有大型整型数组时,可使用short。

当只有一个字节时,使用char。

 

3.1.6 整型字面值

如果第一位为1~9,则为10进制

如果第一位为0,第二位为1~7,则为8进制

如果前两位为0x,则为16进制

在默认情况下cout以十进制格式显示整数:

#include<iostream>

int main()
{
    using namespace std;
    int a = 42;//十进制
    int b = 0x42;//十六进制
    int c = 042;//八进制

    cout << "a: " << a << endl;
    cout << "b: " << b << endl;
    cout << "c: " << c << endl;
}

/*
输出结果:
a: 42
b: 66
c: 34
*/

当然也可以使用十六进制或者八进制输出,在头文件iostream中定义了控制符用于指示cout输出不同类型的值

十进制:dec(默认输出十进制,所以不需要特意进行使用)

八进制:oct

十六进制:hex

#include<iostream>
using namespace std;

int main()
{
    int a = 42;

    cout << dec_a = " << a << endl;

    cout << oct;//使用八进制输出
    cout << oct_a = " << a << endl;

    cout <<hex;//使用十六进制数出
    cout << hex_a = " << a << endl;

    return 0;
}

/*
输出结果:
dec_a = 42
oct_a = 52
hex_a = 2a
*/

 

3.1.7 如何确定常量类型

如果没有特别说明或者有后缀则使用int

后缀u或U - 无符号类型

后缀L - long

后缀ll或LL - long long

后缀可以组合使用,如:22022uL 表示使用无符号long类型

对于不带后缀的十进制则,使用int , long, long long 中可以存储的最小整型

对于不带后缀的八进制或十六进制则,使用int , unsigned int long, unsigned  long, long long ,unsigned long long 中可以存储的最小整型

 

3.1.8 char类型 字符和小整数

char类型是专门为存储字符而设计的,但是也可以用来存储比short小的整数

  • 字符的输出函数

cout.put()可以用来替代<<输出字符。其中的句点叫做成员运算符,cout是类ostream的对象,put()是类ostream的成员函数。要通过成员对象使用成员函数必须使用句点连接。读作:通过类对象cout使用函数put()

char a = 'M';
cout.put(a);

//输出结果为:M
  • 字符的书写方式

书写字符的方式有多种,最简单的就是使用单引号将字符扩起。这种方法表示的是字符的数值编码,例如:

5fd10233a29543d1b3250c96013389e1.png

 

有的字符无法使用这种方式,C++定义了转义编码:

8830f674206541c3be48725853fd865a.png

 转义字符作为常量时,应该使用单引号扩起。在字符串中则不需要。


cout << '\n' //字符换行

cout << "hello! \n" //字符串换行

 

  • 通用字符名

C++元须事先提供扩展源字符集和扩展执行字符集。C++中有一种表示 这种特殊字符的机制,他独立于任何特定的键盘,使用通用字符名。

通用字符名的用法类似于转义序列。通用字符名以\u或\U开头,其中\u后是八个十六进制位,\U后是十六个十六进制位。这些位表示的是字符的ISO 10646 码点

b6f1990c0fef4604b3d8c316572c6ae9.png

 

  • char16_t和char32_t

进行字符编码时,如果有特定的长度和符号特征的类型,将会有帮助。为此,C++11新增了数据类型char16_t和char32_t。二者均是无符号类型,但前者长16位,后者长32位。C++11使用前缀u表示char16_t类型的字符常量或字符串,使用前缀U表示char32_t类型的字符常量。

char16_t ch1 = u'q'; //16位基础字符q

char32_t ch2 = U'U0000222B'; //32位通用字符名
  • bool类型

C++新增了bool类型,在计算中bool值可以表示为true或false。任意非零值均为true,false则为0。任何数字或指针都可以被隐式转换为bool值。

 

3.2 const限定符

C++有一个关键字const叫做限定符,可以使用该关键字来定义常量,例如一个表示月份的常量,则为:

const int Months = 12;

在这之后months就是一个代表12的常量了。

 

3.3 浮点型

3.3.1 书写浮点数

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

C++有两种书写浮点型的方法:小数点表示法和E表示法

E表示法由指数和尾数组成,指数为正向右移动小数点,指数为负,向左移动小数点

0.000833 //小数点表示法

8.33E-4 //E表示法,尾数8.33 指数-4 表示8.33的小数点左移4位 0.000833

8.33E4 //E表示法,尾数8.33 指数4 表示8.33的小数点右移4位 83300

3.3.2 浮点类型

c++有三种浮点类型float、double、long double

float至少32位有效位

double至少48位有效位,且不少于float

long double至少和double一样多

可以从头文件cfloat和float.h找到限制范围

 

3.3.3 浮点常量    

浮点常量默认为double类型,如果想要更改可以使用后缀指定

float可以使用后缀f或F

long double可以使用后缀l或L

1.234F//float类型常量

1.234L//long double类型常量

 

3.4 C+共有五种运算符:加法 减法 乘法 除法 求模

加法 +

减法 -

乘法 *

除法 /  结果是商的整数部分。当除数和被除数都是整数时,结果为商的整数部分。当二者至少有一个是浮点型时,结果为浮点型

int a = 42;
int b = 8;
float c = 8.0

cout << "a/b=" << a/b << endl;
cout <<"a/c=" << a/c << endl;

/*
输出结果:
a/b=5
a/c=5.25
*/

求模 % 结果是商的余数部分(操作数只能为整数)

 

算术运算符遵循先乘除后加减的基本规律,运算符优先级获取链接:运算符优先级_百度百科 (baidu.com)

 

  • 类型转换

C++会自动进行很多类型转换

1309b8eff60448ac80ae9dd913607b7d.png

但有些转换是安全的有些转换可能会有一定的风险

6f859a625eba4b0ab9c6bf8f7726a4b1.png

将0赋给bool变量是会转换为false,非零值将会转换为true。

1 自动类型转换

C++将使用大括号{}初始化的方式称为列表初始化。这种情况下的类型转换不允许缩窄

当同一个表达式中包含两种不同的算数类型时,C++将bool、char、unsigned char、signed char和short转换为int。这些转换被叫做整型提升。具体遵循以下守则

3a88d104221e420c8b014696cd138b76.png

2 强制类型转换

强制类型转换的格式为

(typename) value 或者  typename (value)

C++中的强制类型转换可以使用static_cast<>,格式为

atatic_cast<typename>(value)

int a = 10;

float b = (float)a;//将int转换为float

也可写作
float b = a(float);

也可写作
float b = static_cast<float>(a);

 

类型也可使用auto自动推导,主要用于复杂结构中,暂不过多学习

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值