C艹的变量名的几种简单的规则
1. 在名称中只能使用字母字符、数字和下划线
2. 名称的第一个字符不能是数字
3. 区分大写字符与小写字符
4. 不能将C艹关键字用作名称
5. 一两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符
6. C艹对于名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度限制
C艹中的整型
Char、short、int、long、long long其中每种类型都有符号版本和无符号版本,总共有10种类型可供选择。Char类型有一些特殊属性,最常用来表示字符,而不是数字。
C艹提供了一种灵活的标准,确保了最小长度(从C语言借鉴而来),不同系统的宽度并不一样,要视系统而定
1. Short至少16位
2. Int至少与short一样长
3. Long至少32位,且至少与int一样长
4. Long long至少64位,且至少与Long一样长
字节byte通常指的是8位的内存单元,但是在C艹中对于字节的定义与此不同。字节可能取值的数目必须等于或超过字符数目。例如在ASCII和EBCDIC字符集中,它们都可以用8位来容纳,所以在这两种字符集系统中,C艹字节通常包含8位,然而,在Unicode中,有些实现可能使用16或者32位的字节,有些人使用术语八位组octct表示8位字节
Sizeof是一个运算符,对类型名如Int使用sizeof运算符时,应将名称放在括号内;但对变量名使用该运算符时,括号是可选的
C艹初始化的特殊方式:
首先是“=”不是必须的
其次{}内可以不包含任何东西,变量初始化为0
可以更好地防范类型转换错误
Int hamburgers = {24};
Int hamburgers{};
选择整型类型,通常int被设置为对目标计算机而言最为自然的长度。自然长度指的是计算机处理起来效率最高的长度。如果没有非常有说服力的理由来选择其他类型,则应用int。
三种进制系统:10 8 16,三种表示方式虽然不同,但是都是为了表示方便,最终都会转换成二进制存储在计算机中
int chest = 42; //decimal integer literal
int waist = 0x42; //hexadecimal integer literal
int inseam=042; //octal integer literal
Cout<<hex;
Cout<<oct;
在C++中,对于常量类型的变量会有几种后缀
L ul
Ull ll ULL Ull
U u
char类型
专为存储字符(如字母和数字)而设计的。它足够长,能够表示目标计算机系统中的所有基本符号-所有的字母、数字、标点符号等。实际上,很多系统支持的字符都不超过128个,因此用一个字节就可以表示所有的符号。因此,虽然char最常用来处理字符,但也可以将它用作比short更小的整型。
Cout.put()函数 -用来显示一个字符
句点被称为成员运算符
通用字符名
说的是一些小语种一些独特的字符,在ISO 10646编码中会有特定的字符码,用\u进行转义
Char在C艹中默认情况下是既没有符号也不是有符号。是否有符号由C++实现决定,这样编译器开发人员可以最大限地将这种类型与硬件属性匹配起来
Unsigned char通常表示范围为0-255 而signed char 表示范围为-128到127
Wchar_t
在日文汉字系统中 程序需要处理的字符集可能无法用一个8位的字节表示。 因此编译器厂商可以将char定义为一个16位的字节或更长的字节,其次,一种实现可以同时支持一个小型字符集和较大的扩展字符集。8位的char表示基本字符集,wchar_t表示扩展字符集。Wchar_t是一种整数类型,它有足够的空间。这种类型与另一种整型(underlying)的长度和符号属性相同。对底层类型的选择取决于实现,因此在一个系统中,他可能是unsigned short,而在另一个系统中,则可能是Int。
Cin与cout输入输出看作是char流,不适用与处理wchar_t,需要用wcin,wcout。另外可以通过加上前缀L来指示宽字符常量和宽字符串。
C艹11新增 char16_t char32_t均为无符号整型,另外
Char16_t = u’p’;
Char32_t = U”china”在2010上并不能实现,必须在15版本的才能实现
关于Bool类型,任何数字值或指针值都可以被隐式转换为bool值,任何非零值都转换为true,而零被转换为false
Const 限定符,应在生命中对const进行初始化
Const比#define好的几个点
1. 能够明确指定类型
2. 可以使用C艹的作用域规则将定义的限制在特定的函数或文件中
3. 可以将const用于更复杂的类型
浮点数在计算机中的存储
浮点数被分为两部分存储,一部分表示值,另一部分用于对值进行放大或缩小。
缩放因子的作用是移动小数点的位置,术语浮点因此而得名。不过C艹内部的浮点是基于二进制数,因此缩放因子是2的幂,不是10的幂
在用e指数的表示法时数字中不能有空格 如7.2 E6是不合法的
3中浮点类型 float double long double
有效位的概念
Float至少32位有效位
Double至少48位有效位,且不少于float
Long double至少和double一样多
这三种类型的有效位数可以一样多。
指数范围至少是-37到37
Floatnum.cpp
通常cout会删除结尾的零,调用cout.setf()将覆盖这种行为,至少在新的实现中是这样
Fltadd.cpp
在这个编译器中float类型能表示数字中的前6位或前7位,在修改超出这个范围的值时显得毫无意义。因此会得出0的结果,实际上为1.
整型和浮点型统称为算数类型。
Arith.cpp
对于float,C艹只保证6位有效数位,精度的概念是一个雷区。
通常情况下,浮点型的常量在C艹中被认为是double型的
VS2015貌似对这种转换直接给X掉了并不能够通过编译。
const int code = 66;
int x = 66;
char c1 = { 31325 }; //narrowing, notallowed
char c2 = { 66 }; //allowedbeacuse char can hold 66
char c3 = { code }; // ditto
char c4 = { x }; //notallowed, x is not constant
x = 31235;
char c5 = x; //allowedby this form of initialization
c5最后会被初始化为3’\x’
在同一个表达式中包含两种不同的算数类型时,C艹将执行两种自动转换:首先,一些类型在出现时便会自动转换:其次,有些类型在与其他类型同时出现在表达式中时将被转换。
在计算表达式时,C艹将bool、char、unsigned char、signed char 和short值转换为int。具体地说,true被转换为1,false被转换为0.这些转换被称为整型提升(integral promotion)
(long)thorn C式 两种不同的强转方式
Long(thorn) C艹式
强制转换运算符 static_cast<> 15章介绍
C艹11中新增的AUTO声明。但是并不合适普通的类型如
Auto x = 0.0 //x is double
Double y = 0; // y is double
Auto z = 0; //z is int, because 0 is int
处理复杂类型,如标准模板库STL中的类型时,自动类型推断有时才能显现出来。例如
Std::vector<double> scores;
Std::vector<double>::iterator pv =scores.begin();
C艹11允许您将其重写为下面这样:
Std::vector<double> scores;
Auto pv = scores.begin();
我觉得这段挺重要的,有些基础的概念,你不看真的不知道是如何实现的。
A++ ++a
A++: 先用a后再操作a
++a: 先对a操作后再用