目录
一、简单变量
1、变量名
C++提倡使用有一定含义变量的变量名,如变量表示差旅费,则命名为cost_of_trip或者CostOfTrip等,而不命名为x,cot等看不出什么含义的名字。另外,还需要遵循以下命名规则:
①在名称中只能使用字母字符,数字和下划线
②名称的第一个字符不能为数字
③区分大小写字符
④不能将C++关键字用作名称(如int、void等)
⑤ 以两个下划线或者一个下划线和大写字母打头的名称会被保留给实现(编译器及其使用的资源)使用,以一个下划线开头的名称会被保留给实现,用作全局标识符
⑥有些平台限制长度
2、整形short、int、long和longlong
这四种类型都是整型,唯一的不同是范围的区别。受到底层硬件的影响,C++当中这四种类型的范围并不是固定的。由于要兼容各种不同类型的系统与硬件,所以没有办法对类型进行统一。
因而为了避免引起不便,C++提供了一种灵活的标准,它确保了每一种类型的最小范围。
short:至少16位
int:至少和short一样长
long:至少32位,且至少和int一样长
longlong:至少64位,且与至少与long一样长
我们使用DEVC++来编写一个例子:输出short、int、long和longlong的字节数,最大值以及int最小值
在这之前,我们先了解一下climits头文件,其定义了符号常量来表示类型的限制,例如INT_MAX表示int类型能够存储的最大值。下表对该文件中定义的符号常量进行了总结:
#include <iostream>
#include <climits>//该头文件定义了符号常量来表示类型的限制
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
using namespace std;//如果使用iostream而不是iostream.h则需要使用该名称空间编译指令来使得iostream中的定义对程序可用
int n_int=INT_MAX;//INT_MAX为int最大值
short n_short=SHRT_MAX;//SHRT_MAX为short最大值
long n_long=LONG_MAX;//LONG_MAX为 long最大值
long long n_llong=LLONG_MAX;//LLONG_MAX为longlong最大值
//cout类似C语言中的printf,endl为重启一行控制符
cout<<"int is "<<sizeof(int)<<"bytes"<<endl;//打印 int类型字节数
cout<<"short is "<<sizeof n_short<<"bytes"<<endl;//打印 short类型字节数
cout<<"int is "<<sizeof n_long<<"bytes"<<endl;//打印 long类型字节数
cout<<"int is "<<sizeof n_llong<<"bytes"<<endl; //打印 longlong类型字节数
cout<<endl;//重启一行
cout<<"Maximum values:"<<endl;//打印字符串“Maximum values:”
cout<<"int:"<<n_int<<endl;//打印int类型最大值
cout<<"short:"<<n_short<<endl;//打印short类型最大值
cout<<"long:"<<n_long<<endl;//打印long类型最大值
cout<<"long long:"<<n_llong<<endl<<endl;//打印longlong类型最大值
cout<<"Minimum int value="<<INT_MIN<<endl;//打印int类型最小值
cout<<"Bits per byte="<<CHAR_BIT<<endl; //打印一个字节占多少位
return 0;
}
PS:在C++98中,可以使用如下方式进行初始化:
int emus{7};
int rheas={12};
① 此时等号可以使用也可以不使用
②大括号可以不包含任何东西,此时变量将初始化为0
③有助于更好的防范类型转换错误
3、无符号类型
前面介绍的4种整形都有一种不能存储负数值无符号变体:
unsigned short change;
unsigned int rovert;
unsigned long gone;
unsigned longlong lang_lang;
使用无符号类型可以增大变量能够存储的最大值,当然,变量不能为负数。
4、整形字面值
与C一样,C++可以使用三种不同的计数方式书写整数
int chest=42;//十进制
int waist=0x42;//十六进制0x开头,表示4*16+2=66
int inseam=042;//八进制,第一位为0,第二位为1~7的一位数,表示4*8+2=34
5、char类型:字符和小整数
下面介绍最后一种整型: char 类型。顾名思义,char 类型是专为存储字符 (如字母和数字) 而设计的。现在,存储数字对于计算机来说算不了什么,但存储字母则是另一回事。编程语言通过使用字母的数值编码解决了这个问题。因此,char 类型是另一种整型。它足够长,能够表示目标计算机系统中的所有基本符号一一所有的字母、数字、标点符号等。实际上,很多系统支持的字符都不超过 128 个,因此用一个字节就可以表示所有的符号。因此,虽然 char 最常被用来处理字符,但也可以将它用做比 short更小的整型。
需要注意的是,char在默认情况下既不是没有符号,也不是有符号。而当将char用作数值类型的时候,则需要区分是否有符号,这时可以使用如下进行区分:
char fodo;
signed char bar;//有符号,可表示范围:-128~127
unsigned char snark;//无符号,可表示范围:0~255
PS:由于char只有8位,在后续逐渐不满足需要,C++增加了wchar_t(宽字符类型)、char16_t(16位)和char32_t(32位)类型
6、bool类型
bool类型的值可以为true或者false,表示真假。可以这样编写语句:
bool is_ready=true;
true和false都可以通过提升转换为int类型,true转换为1,false转换为0
int ans=true;
int promise=false;
二、const限定符
用于定义常量,常量被初始化后,其值就固定了,编译器将不允许修改该常量的值。如声明常量时未初始化,该常量的值将是不确定的,且无法修改。
其通用格式如下:
const type name=value;
如:const int Months=12;
三、浮点数
浮点数指可以表示带小数部分的数字。
1、书写浮点数
(1)常用标准小数点表示法
12.34
939.4454
0.00522
(2)E表示法
2.52e+8//表示2.52乘以10的8次方
8.33E-4//表示8.33乘以10的-4次方
2、浮点类型
和C一样,C++也有3种浮点类型:float(至少32位)、double(至少48位,且不少于float)和long double(至少和double一样多)。这些类型是按照它们可以表示的有效数位和允许的指数最小范围来描述的。这3种类型的指数范围至少是-37到37。
float tub=10.0/3.0;
double mint=10.0/3.0;
long double max=10.0/3.0
下面通过一个例子来了解一下浮点数
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
using namespace std;//如果使用iostream而不是iostream.h则需要使用该名称空间编译指令来使得iostream中的定义对程序可用
cout.setf(ios_base::fixed, ios_base::floatfield);//ios_base::fixed是设置cout为定点输出格式;ios_base::floatfield是设置输出时按浮点格式,小数点后有6位数字。所谓定点输出即小数点位置固定(数值范围有限),
float tub=10.0 / 3.0;
double mint = 10.0 / 3.0;
const float million = 1.0e6;
cout << "tub = " << tub;
cout << ",a million tubs = " <<million * tub;
cout << ",\nand ten million tubs = ";
cout << 10 * million * tub << endl;
cout << "mint = " << mint << " and a million tubs = ";
cout << million * mint << endl;
return 0;
}
通常 cout 会删除结尾的零。例如,将 3333333.250000 显示为 3333333.25。调用cout.setf()将覆盖这种行为,至少在新的实现中是这样的。这里要注意的是,为何 float 的精度比 double 低。tub 和 mint都被初始化为:10.0/3.0——3333333333333333333····由于 cout 打印6位小数,因此tub和 mint 都是精确的。但当程序将每个数乘以一百万后,tub 在第7个3之后就与正确的值有了误差。tub在7位有效位上还是精确的(该系统确保 float 至少有 6 位有效位)。double 类型的变量显示了 13个3,因此它至少有 13 位是精确的。由于系统确保 15 位有效位,因此这就没有什么好奇怪的了。另外,将 tub 乘以一百万,再乘以 10 后,得到的结果不正确,这再一次指出了 float 的精度限制。
3、浮点常量
默认情况下,程序将像8.24、2.4E8这样的浮点数设为double类型,如果需要常量为float类型,需要加f或F后缀,long double 类型,需要加l或者L后缀。
1.234f;
2.45E20f;
2.2L
4、浮点数优缺点
优点:①可以表示整数之间的值
②可以表示的范围大得多
缺点:①运算速度变慢
②精度降低
四、C++算术运算符
下面是5种C++算术运算符:
①+运算符,加法
②-运算符,减法
③*运算符,乘法
④/运算符,除法,若两者为整数,则仅保留整数部分
⑤%运算符,取余,仅对整数有效
1、运算优先级和结合性
int fly=3+4*5;
先乘除再加减,结果为23
float logs=120/4*5
同一优先级则从左到右,先除再乘,结果为150
int dues=20*5+24*6
先乘,后加,但是有两个乘法,该如何确定顺序?C++将这个问题留给了现实,让它来决定系统中的最佳顺序。这个例子中虽然两种顺序结果都一样,但是也有两种结果不同的情况。
2、类型转换
(1)初始化和赋值进行的转换
C++允许将一种类型的值赋给另外一种类型的变量,这样做时,值将被转换为接收的类型。如将short型扩展为long型,此时内容不变,但是会占用更多的字节。不过有时候一些转换会带来一些麻烦。
(2)以{ }方式初始化时进行的转换
使用大括号的初始化称为列表的初始化,列表初始化不允许缩窄,例如:不允许将浮点型转换为整形。在不同整形之间转换或间整形转换为浮点型可能被允许。条件是编译器知道目标变量能够正确的存储赋给它的值。
(3)表达式中的转换
short chickens=20;
short ducks=35;
short fowl=chickens+ducks;
在上述例子中,C++程序将chickens和ducks的值转换为int,再将运算结果转换为short类型,还有诸如此类的转换,感兴趣可以了解一下
(4)传递参数时的转换
传递参数时类型转换通常由C++函数原型控制。然而,也可以取消原型对参数传递的控制,此时,C++将对char和short类型(signed和unsigned)应用整型提升。将float参数提升为double,不过这种做法不提倡。
(5)强制类型转换
C++可以通过强制类型转换机制显示地进行类型转换。其通用格式如下;
(typename) value;
typename (value);
第一种来自C语言,第二种是纯粹的C++
3、auto声明
在C++中,auto 可以使编译器根据初始值的类型推断变量的类型
auto n=100;//int类型
auto x=1.5;//double类型
auto y=1.3e12L;//long double 类型
C++的学习笔记持续更新中~
要是文章有帮助的话,就点赞收藏关注一下啦!
感谢大家的观看
欢迎大家提出问题并指正~