C++prime plus第6版第三章要点

来源:互联网 发布:idea关联源码 编辑:程序博客网 时间:2024/05/19 19:30

变量命名规则:

1.命名仅可以包括字母、数字和下划线;不能以数字开头

2.命名对大小写敏感

3.不能以关键字作为命名

4.双下划线或下划线大写字母开头被保留使用(编译器或其他资源使用);下划线开头被保留给实现,用作全局标识符

5.没有长度限制

 

基本整型:

类型

长度

char

至少能包含基本字符集,一般ASCII字符集都用8位来容纳

short

至少16位

int

至少和short等长

long

至少32位,且至少与int等长

long long

至少64位,且至少与long等长

计算机内存编址的基本单位为字节。字节通常指8位的内存单元。然后C++的字节定义为由至少能够容纳基本字符集的相邻位组成,即char代表字节的长度。

在美国,基本字符集通常为ASCII和EBCDIC字符集,它们都能用8位来容纳,所以在使用这两种字符集的系统中,C++字节通常为8位。然后,一些使用更大字符集的系统,如Unicode,C++字节可能就是16位甚至32位。术语八位组(octet)表示8位字节。

sizeof运算符可以返回类型或变量的字节长度。头文件climits中包含有关整型限制的信息,其中CHAR_BIT为字节的位数。

整数的初始化方式:

1.int a=5;

2.int a=5; int b=a;

3.int a{5};

4.int a={5};

5.int a{};//a==0

6.int a={};//a==0

注:如果列表初始化的值不是int,编译器将报错。

整型溢出:

整型变量发生溢出的话 ,其值将会从范围另一端的取值。比如:假设有符号整型的存储共有8bit。那么01111111(127)为正值的最大值(计算机用补码形式存储),加1的话便10000000。10000000(补码)=-128。

正数的原码=反码=补码

负数反码等于负数的原码除符号位取反

负数补码等于负数的反码+1

注:1)反码是为什么正负数相加不为零。2)补码是为了进一步消除-0。3)符号位为1其余为0的补码为最小负数-1(例如3bit最小值为-2^3=-8)

正数(原码、反码和补码)

负数(原码)

负数反码(反码=原码除符号位取反)

负数补码(补码=反码+1)

(0)0000

(-0)1000

(-0)1111

(-0)无反码

(1)0001

(-1)1001

(-1)1110

(-1)1111

(2)0010

(-2)1010

(-2)1101

(-2)1110

(3)0011

(-3)1011

(-3)1100

(-3)1101

(4)0100

(-4)1100

(-4)1011

(-4)1100

(5)0101

(-5)1101

(-5)1010

(-5)1011

(6)0110

(-6)1110

(-6)1001

(-6)1010

(7)0111

(-7)1111

(-7)1000

(-7)1001

 

 

 

(-8)1000

 

选择整型类型:

int被设置为计算机最自然的长度。自然长度指计算机处理起来最高效率的长度。因此默认应该使用int。

但是应该注意,如果明确知道数据长度大于16位,则应该使用long,因此这样程序在移植时,才不会出现错误。

如果为了节省空间,并且明确数据长度小于16位,则应该用short。

整型字面值:

3种书写方式:如果第一位为1-9,则基数为10;如果第一位为0,则基数为8;如果前两位是0x或0X,则基数为16。

如果要用cout输出八进制或十进制或十六进制:oct、dec、hex

即std::cout<<oct;   std::cout<<变量名;即可输出八进制。

对于十进制,如果没有后缀,将从int、long和long long中选取能存储下数据的最小类型。

对于八进制或十六进制,如果没有后缀,将从int、unsigned int、long、unsignedlong、long long和unsigned longlong中选取能存储下数据的最小类型。

后缀u/U表示无符号、l/L表示long。例如ULL表示unsignedlong long。

char类型:

std::cout.put(77);//显示字符M,该函数显示一个字符。

注:1.不能说char一定是1个字节,这个世界上甚至存在着不按字节(8bits)寻址的机器

2.标准只规定了char不能小于8位,并没规定其上限。

3. C++中,对象的大小是用char的大小的倍数来表示的,sizeof(char)恒等于1-----这是教主在TC++PL中说的。我到现在还有点糊涂,因为我一直以为sizeof返回的是字节数,而教主的意思是:无论你的机器用几个字节来表示charsizeof(char)都为1

char字面值:

转义字符可用基于八进制或十六进制表示,\032\x1a

通用字符名,\u后面是8个十六进制位;\U后面是16个十六进制位。

wchart_t类型:16

cincout传输的是char流,为了支持wchar_t,编译器提供相似的工具wcinwcout

前缀L表示宽字符类型(wchar_t

char16_tchar32_t类型都是无符号的

前缀用u表示char16_tU表示char32_t

bool类型:

任何非零值都会被强制转为true;而零值则会转为false

const限定符

定义常量的通用格式 const type name = value;

浮点数类型:

书写方法有两种,一种是带有小数点,例如7.5,7.0之类的;另一种是用E表示法,这种方法可以不用小数点,例如7E51.23E-9

float

至少6个有效位

至少32

double

至少10个有效位

至少48位,且不小于float

long double

至少10个有效位

至少不小于double

定点表示法输出设置:

std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield);

浮点常量:后缀f表示float;后缀l表示long double。

类型转换:

转换

潜在问题

较大浮点类型转为较小浮点类型,如doublefloat

精度降低,值可能超出范围,在这种情况下,结果是不确定的

浮点类型转整型

小数部分丢失,原来值若超出范围,结果是不确定的

大整型转小整型,如longshort

原来值可能超出范围,通常只复制右边的字节

{}方式初始化时,不允许缩窄,例如不允许浮点型转换为整型。

在计算表达式时,C++boolcharunsigned charsigned char、和short值转换为int,这称之为整型提升

wchart_t被提升为下列类型中第一个宽度足够存储wchar_t取值范围的类型:intunsigned intlongunsigned long

注:如果shortint短,则unsigned short会转换为int;如果short等长于int,则unsigned short会转换为unsigned int

传递参数时的转换

传递参数时的类型转换通常由C++函数原型控制。然而,也可以取消原型对参数传递的控制(重载)。在这种情况下,C++将对charshort类型应用整型提升,同时为了保持与C语言代码的兼容,C++float提升为double

强制类型转换

(typeName)value//C语言风格

typeName(value)//纯粹C++风格,目的是想让类型转换就像调用函数一样方便。

 

原创粉丝点击