基本数据类型
变量的定义
变量是在程序运行过程中其值可以改变的量,需要在定义之后才可以使用
变量类型 变量名
变量可以在定义的时候就赋初值
变量类型 变量名=初值
变量名一般来说可以任意取,但是需要满足几个条件:
1.不能是C语言标识符
2.变量名的第一个字符必须是字母或者下划线,除第一个字符之外的其他字符必须是字母、数字或下划线
3.区分大小写
变量类型
基本数据类型可以分为整型、浮点型、字符型
C++中包括布尔型
1整型
整型一般可以分为短整型(short)、整型(int)、长整型(long long)
整型也被称为long int,长整型也称为long long int
(一)整型int,一个整数占用32bit,即4byte(32位,4字节),取值范围是-2^31~+(2^31-1)
即绝对值在10^9范围内的整数都可以定义成int型
(二)长整型long long,一个整数占用64bit,即8byte(64位,8字节),取值范围是-2^63~+(2^63-1)
例如10^10或者10^18
注意:如果long long型赋大于2^31-1的初值,则需要在初值后面加上LL,否则会编译错误
对于整型数据,可以在前面加上unsigned,表示无符号型
综上所述:
若题目中要求10^9以内或者说32位整数,就用int型来存放
若要求10^18以内或者说64位整数,就用long long型来存放
2浮点型
浮点型就是小数,可以分为单精度(float)和双精度(double)
(一)单精度float,一个浮点数占用32bit,其中1bit作为符号位,8bit作为指数位,23bit作为尾数位,可以存放的浮点数的范围是-2^128~+2^128,但是其有效精度只有6~7位
(二)双精度double,一个浮点数占用64bit,其中按照浮点数的标准,1bit作为符号位,11bit作为指数位,52bit作为尾数位,可以存放的浮点数的范围是-2^1024~+2^1024,但是其有效精度只有15~16位
%f是float和double型的输出格式
综上所述,不要使用float,碰到浮点型的数据都应该用double来存储
3.字符型
(一)字符变量和字符常量
字符常量使用ASCII码统一编码,标准ASCII码的范围是0~127,其中包含了控制字符或通信专用字符和常用的可显示字符
比如0~9、A~Z、a~z等都是可显示字符,它们的ASCII码分别是48~57、65~90、97~122
注:小写字母比大写字母的ASCII码值大32
字符常量必须用单引号标注起来,以区分是作为字符变量还是字符常量出现,因此字符常量必须用单引号标注,以表明它们是字符常量
也可以把ASCII码值直接赋给字符变量,因为在计算机内部,字符就是按ASCII码存储的
%c是char型的输出形式
(二)转义字符
ASCII码中有一部分是控制字符,是不可显示的,像换行、删除、Tab等都是控制字符,在C语言中可以用一个右斜线加一些特定的字母来表示
例如,换行通过"\n"来表示,Tab键通过"\t"来表示
由于这种情况下斜线后面的字母失去了本身的含义,因此又称为转义字符
常用的转义字符只有下面两个,
\n代表换行
\0代表空字符NULL,其ASCII码为0,注意\0不是空格
(三)字符串常量
字符串是由若干字符组成的串,C语言中没有单独一种数据类型可以存储,但C++中有string类型,只能用字符数组的方式
字符常量就是单个使用单引号标记的字符,那么字符串常量则是由双引号标记的字符集,例如"HELLO WORLD"
字符串常量可以作为初值赋给字符数组,并使用%s的格式输出
注意不能把字符串常量赋给字符变量
4.布尔型
布尔型在C++中可以直接使用,但是在C语言中必须添加stdbool.h头文件才可以使用,布尔型变量又称为bool型变量,它的取值只能是true(真)或者false(假),分别代表非零与零
在赋值时,可以直接使用true或false进行赋值,或是使用整型常量对其进行赋值,只是整型常量在赋值给布尔型变量时会自动准换为true或者false
注意,非零包括正整数和负整数,即1和-1都会转换为true
但是对计算机来说,true和false在存储时分别为1和0,因此如果使用%d输出bool型变量,则true和false会输出1和0
若有一个条件语句,系统会判断其是否为真或者为假
强制类型转换
有时需要把浮点数的小数部分切掉来变成整数,或是把整型变为浮点型来方便做除法(整数除以整数在计算机中视为整除操作,不会自动变为浮点数),或是在其他很多情况下,都会用到强制类型转换,即把一种数据类型转换成另一种数据类型
格式如下:
(新类型名)变量名,即把需要变成的类型用括号写在前面即可
如果将一个类型的变量赋值给另一个类型的变量,却没有写强制类型转换操作,那么编译器将会自动进行转换
注意在计算过程中需要转换类型,所以要手动写强制类型转换
符号常量和const常量
符号常量就是替换,即用一个标识符来替代常量,又称为宏定义或者宏替换
格式如下:
#define 标识符 常量
#define 标识符 任何语句或片段
注意末尾不加分号
另一种定义常量的方法是使用const
格式如下:
const 数据类型 变量名 = 常量;
注意末尾要加分号
两种写法都称为常量,因为它们一旦确定其值后就无法改变
运算符
常用的运算符有算术运算符、关系运算符、逻辑运算符、条件运算符、位运算符
1.算术运算符
加、减、乘、除、取模、自增、自减
对于除法运算符,需要注意的是,当被除数和除数都是整型时,并不会得到一个double浮点型的数,而是直接舍去小数部分(向下取整)
如果除数是0,会导致程序异常退出或是得到错误输出,因此在出现问题时候可以检查是否在某种情况下除数为0
加减乘除四种运算符的优先级顺序和四则运算的优先级相同
取模运算符返回被除数与除数相除得到的余数
取模运算符的优先级和除法运算符相同
自增运算符有两种写法,i++和++i,两个都可以实现把i增加1的功能,但是也有不同的地方,区别是i++是先使用i再将i加1,而++i则是先将i加1再使用i
自减运算符上同
2.关系运算符
常用的关系运算符共有六种,<、>、<=、>=、==、!=
3.逻辑运算符
常用的逻辑运算符有三种,&&、||、!,分别对应“与”或“非”,它们所实现的功能
4.条件运算符
条件运算符是C语言中位移的三目运算符,即需要三个参数的运算符,格式如下
A? B : C
上式的意义是如果A为真,那么执行并返回B的结果,如果A为假,执行并返回C的结果
5.位运算符
位运算符有六种
由于int型的上限为2^31-1,因此程序中无穷大的数INF可以设置成(1<<31)-1(注意位运算必须加括号,因为位运算符的优先级没有算术运算符高),一般更常用的是2^30-1,它可以避免相加超过int的情况,该数字写成二进制的形式就是0x3fffffff,因此下面两个式子是等价的
const int INF=(1<<30)-1;
const int INF=0x3fffffff;