重学c++primer(2)

来源:互联网 发布:杜兰特本赛季数据 编辑:程序博客网 时间:2024/06/08 06:06

重学c++primer(2)

第二章:变量和基本类型

1 基本内置类型

(1)算术类型

c++定义了一套包括算术类型和空类型在内的基本数据类型。其中算术类型包括了字符,整形数,布尔值,浮点数。空类型不对应具体的值,仅用于一些特殊场合,比如当函数不返回任何值时使用空类型作为返回类型。

1.算术类型。

共两类:

整型和浮点型

算术类型的尺寸在不同机器上有所差别,具体来说某一类型所占的比特数不同。它表示的数据范围也不一样。

c++提供几种字符类型。其中大部分支持国际化,基本字符类型是char。一个char空间可以确保容纳机器基本字符集中的任意字符对应的数字值。其他字符类型试用于扩展字符集,比如wchar_t,char16_t,char32_t.

c++语言规定一个int至少和一个short一样大。一个long至少与一个int一样大,一个long long类型至少与一个long一个样大。数据类型long long是在c++11中新定义。详情请看图。


2 内置类型的机器实现

计算机以比特序列存储数据,每个比特非0即1.大多数计算机以2的整数次幂个比特作为块来处理内存。可寻址的最小内存块称为字节。存储的基本单位为字,它通常由几个字节组成,c++语言中一个字节要至少能容纳机器基本字符集中的字符,大多数机器的字节由8比特构成。

3 有符号类型与无符号类型

除去扩展字符型和布尔类型外,其他整形可分为有符号的,无符号的。带符号的可表示正数,0,负数。无符号的只能表示非负数。int,short,long,long long都是有符号的。凡是类型名前加unsigned的,都是无符号的。另外,字符型分为三种,char,unsigned char ,signed char。要注意,char和signedchar 并不一样。虽然字符型有三种,但其表现形式只有两种,带符号,不带符号,具体的看编译器。

无符号类型中所有比特都用来存储值。

4,类型转换

对象的类型定义了它包含的数据和可进行的运算,其中类型转换操作在大多是类型中都支持,下面关于类型转换。我们看几个例子,

bool  b=42;

int i =b;

i=3.14;

double pi=i;

unsigned char c=-1;

signed char c2 =256;

通过这些例子可以看出》

1 当我把一个非布尔类型的算术值赋给布尔类型时,初始值为0则结果为false,否则为true。

2 当我把一个布尔值赋给非布尔时,初始值为false则结果为0,初始值为true结果为1.

3 当我把一个浮点数赋给整数类型,进行了近似处理,结果值将仅保留浮点数中小数点前的部分,

4 当我把一个整数类型赋给浮点类型,小数部分即为0,。

5 当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取摸后的余数、

6 当赋给带符号类型一个超出它范围的值时,结果是未定义的。

练习 2.1.2结果

unsigned u=10,u2=42;cout<<u2-u<<endl;cout<<u-u2<<endl;
结果是

32

4294967264

int i=10,i2=42;cout<<i2-i<<endl;cout<<i-i2<<endl;cout<<i-u<<endl;cout<<u-i<<endl;
结果是

32

-32

0

0




0 0