前言
本人在阅读C++ primer plus(第六版)的过程中做的笔记,写这篇文章既是为了分享,也是为了以后查阅。以下是本篇文章正式内容。
一、变量名命名规则
1.在名称中只能使用字母字符、数字和下划线;
2.名称的第一个字符不能是数字;
3.区分大小写;
4.以下划线和大写字母开头或者两个下划线开头的名称被保留给实现(编译器及其使用的资源),尽量不要使用;
5.名称的长度没有限制。
变量命名时可以考虑加上前缀,n表示整数(int),d表示双浮点型(double),str表示字符串(string),p表示指针,b表示布尔值(bool),c表示单个字符(char)。
二、整型
术语宽度(width)用来表示存储整数时使用的内存量,使用的内存越多,宽度越大。C++的基本整型按宽度递增的顺序排列为:char、short、int、long、和C++11新增的long long。
1.位与字节
- 计算机内存的基本单元是位(bit),8位的内存单元可以设置成256种不同的组合,即2的8次方,16位的则可以设置成65536个不同的值,以此类推;
- 字节(byte)通常指的是8位的内存单元,1KB等于1024字节,1MB等于1024KB;
- sizeof运算符返回类型或变量的长度,以字节为单位。
各整型的最大值、包含的字节数以及该计算机一个字节包含的位数可以通过以下代码获得:
#include <iostream>
#include <climits> //此头文件包含了整型限制的信息
int main()
{
int n_char = CHAR_MAX; //CHAR_MAX是char整型的最大值
short n_short = SHRT_MAX; //SHRT_MAX是short整型的最大值
int n_int = INT_MAX; //INT_MAX是int整型的最大值
long n_long = LONG_MAX; //LONG_MAX是long整型的最大值
long long n_llong = LLONG_MAX; //LLONG_MAX是long long整型的最大值
std::cout << "各整型的字节长度:\n";
std::cout << "char是:" << sizeof(char) << " byte\n"; //sizeof运算符返回类型或变量的长度,单位为字节
std::cout << "short是:" << sizeof(short) << " byte\n";
std::cout << "int是:" << sizeof(int) << " byte\n";
std::cout << "long是:" << sizeof(long) << " byte\n";
std::cout << "long long是:" << sizeof(long long) << " byte\n";
std::cout << "\n每个字节表示" << CHAR_BIT << "位\n\n"; //CHAR_BIT是每个字节表示的位数
std::cout << "每个整型的最大值:\n";
std::cout << "char的最大值是:" << n_char << std::endl;
std::cout << "short的最大值是:" << n_short << std::endl;
std::cout << "int的最大值是:" << n_int << std::endl;
std::cout << "long的最大值是:" << n_long << std::endl;
std::cout << "long long的最大值是:" << n_llong << std::endl;
std::cin.get(); //按下回车关闭窗口,防止窗口自动关闭
return 0;
}
2.climits头文件中的符号常量
符号常量 | 表示 |
---|---|
CHAR_BIT | char的位数 |
CHAR_MAX | char的最大值 |
CHAR_MIN | char的最小值 |
SCHAR_MAX | signed char的最大值 |
SCHAR_MIN | signed char的最小值 |
UCHAR_MAX | unsigned char的最大值 |
SHRT_MAX | short的最大值 |
SHRT_MIN | short的最小值 |
USHRT_MAX | unsigned short的最大值 |
INT_MAX | int的最大值 |
INT_MIN | int的最小值 |
UINT_MAX | unsigned int的最大值 |
LONG_MAX | long的最大值 |
LONG_MIN | long的最小值 |
ULONG_MAX | unsigned long的最大值 |
LLONG_MAX | long long的最大值 |
LLONG_MIN | long long的最小值 |
ULLONG_MAX | unsigned long long的最大值 |
3.整型
整型溢出行为是指如果超越了整型值的范围,则变量将会从值的另一端取值,像里程表一样。例如short shrtA = 32767;将shrtA加1,则会变为-32768,如下图:
0
∗
8
2
+
4
∗
8
1
+
2
∗
8
0
0*8^2+4*8^1+2*8^0
0∗82+4∗81+2∗80等于十进制的34;如果前两位为0x或者0X,则基数为16,例如0xA5,
10
∗
1
6
1
+
5
∗
1
6
0
10*16^1+5*16^0
10∗161+5∗160等于十进制的165。
cout以十进制格式输出整数而不管这些整数是以什么格式存储在程序中的。头文件iostream提供了控制符dec、hex和oct,分别用于指示cout以十进制格式、十六进制格式和八进制格式输出整数。默认格式为十进制,修改格式之前,原来的格式一直有效。具体使用方式如下:
#include <iostream>
int main()
{
int decDig = 42;
int hexDig = 42;
int octDig = 42;
std::cout << "42以十进制显示是:" << decDig << std::endl; //cout输出的默认格式是十进制
std::cout << std::hex; //控制符hex使cout以十六进制格式显示数字
std::cout << "42以十六进制显示是:" << hexDig << std::endl;
std::cout << std::oct; //控制符oct使cout以八进制格式显示数字
std::cout << "42以八进制显示是:" << octDig << std::endl;
std::cin.get();
return 0;
}
放在数字常量后面的字母是后缀,用来表示该数字常量的类型。整数后面的l或者L表示该整数为long常量;u或者U表示该整数为unsigned int常量;ul(可以调换顺序,大小写均可)表示unsigned long常量;ll或者LL表示long long常量;ull(大小写均可)表示unsigned long long常量。
4.转义序列
三、const限定符
用const限定符创建常量时要进行初始化。
四、浮点数
计算机把带小数部分的数字分成两部分存储,一部分表示值,另一部分对值进行放大或缩小,例如34.1215,可以把第一部分表示为0.341215(值),第二部分表示为100(缩放因子),缩放因子的作用是移动小数点的位置,浮点一词因此得名。C++有两种表示浮点数的方式,第一种是标准的表示法,例如12.34,8.0;第二种是E表示法,例如3.46E6,E6指的是10的6次方,即3.46乘以10的6次方,而3.46E-6则表示3.46乘以10的-6次方。
利用cout输出浮点数时,cout会删除结尾的零,例如将3.233300显示为3.2333。
五、算数运算符
1.%运算符求模,结果是第一个数除以第二个数的余数,两个操作数必须是整数,而且结果也是整数;
2.浮点常量在默认情况下为double类型;
3.类型转换,将一种类型的值赋给另一种类型的变量时,值将被转换为接受变量的类型,例如变量solong为long类型,变量thirty为short类型,语句solong = thirty,进行赋值时thirty的值扩展为long值,扩展后的新值被存储在solong中,而thirty的内容不变;数值转换存在的问题:
转换 | 潜在的问题 |
---|---|
将较大的浮点类型转换为较小的浮点类型,如将double转换为float | 精度(有效位数)降低,值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的 |
将浮点类型转换为整型 | 小数部分丢失,原来的值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的 |
将较大的整型转换为较小的整型,如将long转换为short | 原来的值可能超出目标类型的取值范围,通常只复制右边的字节 |
4.当运算涉及两种类型时,较小的类型将被转换为较大的类型;
5.强制类型转换,例如有int类型的变量thorn,则可以使用以下两种转换方式:
long(thorn); //typename(value)
(long)thorn; //(typename)value
还有一种更严格的强制类型转换运算符:
static_cast<long>(thorn); //static_cast<typename>(value)
6.关键字auto可以根据初始值的类型推断变量的类型。
总结
以上就是本篇文章的全部内容,首先记录了C++中变量的命名规则,然后记录了有关整型的知识,包括各种整型类型、位与字节、climits头文件中的符号常量、整型溢出行为、头文件iostream提供的dec、hex和oct格式控制符、转义序列,接着记录浮点数和算术运算符,其中包括类型转换。