变量命名规则:
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返回的是字节数,而教主的意思是:无论你的机器用几个字节来表示char,sizeof(char)都为1。
char字面值:
转义字符可用基于八进制或十六进制表示,如\032或\x1a。
通用字符名,\u后面是8个十六进制位;\U后面是16个十六进制位。
wchart_t类型:16位
cin和cout传输的是char流,为了支持wchar_t,编译器提供相似的工具wcin和wcout。
前缀L表示宽字符类型(wchar_t)
char16_t和char32_t类型都是无符号的
前缀用u表示char16_t;U表示char32_t
bool类型:
任何非零值都会被强制转为true;而零值则会转为false
const限定符
定义常量的通用格式 const type name = value;
浮点数类型:
书写方法有两种,一种是带有小数点,例如7.5,7.0之类的;另一种是用E表示法,这种方法可以不用小数点,例如7E5,1.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。
类型转换:
转换 | 潜在问题 |
较大浮点类型转为较小浮点类型,如double转float | 精度降低,值可能超出范围,在这种情况下,结果是不确定的 |
浮点类型转整型 | 小数部分丢失,原来值若超出范围,结果是不确定的 |
大整型转小整型,如long转short | 原来值可能超出范围,通常只复制右边的字节 |
以{}方式初始化时,不允许缩窄,例如不允许浮点型转换为整型。
在计算表达式时,C++将bool、char、unsigned char、signed char、和short值转换为int,这称之为整型提升。
wchart_t被提升为下列类型中第一个宽度足够存储wchar_t取值范围的类型:int、unsigned int、long或unsigned long。
注:如果short比int短,则unsigned short会转换为int;如果short等长于int,则unsigned short会转换为unsigned int。
传递参数时的转换:
传递参数时的类型转换通常由C++函数原型控制。然而,也可以取消原型对参数传递的控制(重载)。在这种情况下,C++将对char和short类型应用整型提升,同时为了保持与C语言代码的兼容,C++将float提升为double。
强制类型转换:
(typeName)value//C语言风格
typeName(value)//纯粹C++风格,目的是想让类型转换就像调用函数一样方便。