C++基本语法(二)数据类型及变量类型、常量
数据类型及变量类型、常量
数据类型:
变量(存储信息),变量实际保留的是它存储值的内存位置。创建一个变量,内存就会保留出一部分空间。
操作系统需要根据你创建的变量的数据类型来分配内存及决定在保留内存中存储的内容。(确定占用内存大小及所能存储的最大最小值范围) 1字节=8位
基本的内置类型:
布尔型 (false, true) 1字节byte=8bit | bool |
字符型 (0-255) 1字节 byte=8bit | char |
整型 (-2^31~2^31-1) 最左边的1或0代表负数或正数 4字节byte=32bit | int |
浮点型((1.17549e-038)~(3.40282e+038))e表示10^ 4字节byte=32bit 小数点后7位,省内存 | float |
双浮点型(2.22507e-308)~(1.79769e+308) 8字节byte=64bit 小数点后16位,精度高 | double |
类型缺失 | void |
宽字符型 | wchar_t |
修饰符:C++ 允许在 char、int 和 double 数据类型前放置修饰符,用于改变基本类型的含义。
signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型。
restrict用于限定此指针为唯一访问它所指向对象的方式。
unsigned——从0开始;
signed——从负值开始;
long——位变大,范围更大。long int, 8字节-32位;
short——位变小。short int ,2字节-16位。
C++ 允许使用速记符号来声明无符号短整数或无符号长整数。
eg: unsigned x; (等价于unsigned int x)
无符号有符号整数修饰符差别及转换。
对于无符号化为有符号的位数运算,采取 N-2^n 的计算方法,n 取决于定义的数据类型 int、short、char、long int 等等,N 为无符号数的数值,例如文中的 N=5000,short 为 16 位,计算方法为 5000-2^16 得到 -15536。
1 #include <iostream> 2 using namespace std; 3 4 /* 5 * 这个程序演示了有符号整数和无符号整数之间的差别 6 */ 7 int main() 8 { 9 short int i; // 有符号短整数 10 short unsigned int j; // 无符号短整数 11 12 j = 50000; 13 14 i = j; 15 cout << i << " " << j; 16 17 return 0; 18 } 19 //结果为 -15336 50000
sizeof()函数——输出各种数据类型的大小(字节数)。
max(),min()——输出上下限。
typedef ——重新定义一个类型为另一个名字,如 typedef int newname;
枚举类型(enumeration):
语句格式:enum 枚举名{标识符1= 可能取值1,标识符2=可能取值2,标识符3=可能取值3} 枚举变量;
eg: enum color { red, green=5, blue }c ; // 默认第一个值为0,此处red==0,且后者比前者大1, 此处blue===6
变量类型
变量定义(声明):(未初始化,所有字节的值皆为0)
1 int i, j, k; 2 char c, ch; 3 float f, salary; 4 double d;
变量定义且初始化:
1 extern int d = 3, f = 5; // d 和 f 的声明 2 int d = 3, f = 5; // 定义并初始化 3 d 和 f byte z = 22; // 定义并初始化 4 z char x = 'x'; // 变量 x 的值为 'x'
变量类型可以互相转换:(自动转换和强制转换)
自动转换
- 若参与运算的变量类型不同,会先转换成同一类型。
- 转换按数据精度增加的方向进行。
- char和short型参与运算,必须先转换成int型。
- 赋值运算时,两边数据类型不同则右边的数据类型转换成左边的类型。若右边精度高则丢失一部分精度。
1 int a=1; 2 double b=2.5; 3 a=b; 4 cout << a; //输出为 2,丢失小数部分 5 int a = 1; 6 double b = 2.1; 7 cout << "a + b = " << a + b << endl; //输出为a + b = 3.1
强制转换(通过转换符实现)
1 int a = 1; 2 double b = 2.1; 3 cout << "a + b = " << a + (int)b << endl; //输出为a + b = 3
当使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的),变量声明就显得非常有用。
全局变量和局部变量:
全局变量:在所有函数外部定义的变量,通常在程序头部。一旦声明,整个程序都可用。系统自动初始化,默认为0.
局部变量:函数或代码块内定义的变量,需要自己定义,会覆盖全局变量的值。
1 #include <iostream> 2 using namespace std; 3 4 // 全局变量声明 5 int g = 20; 6 7 int main () 8 { 9 // 局部变量声明 10 int g = 10; 11 12 cout << g; 13 14 return 0; 15 } 16 //输出为10 17 18 19 常量
(程序只能读不能改(限于const),常量不能被再次赋值)
整数常量:包括前缀和后缀。(前缀:进制; 后缀:unsigned 和long,即u和l,大小写不限,但不能重复)
0X或0x : 十六进制
0:八进制
无前缀:十进制
字符常量:(括在单引号中),当前面带有反斜杠有特殊意义
- \\ ——\
- \'——‘
- \n——换行,newline
- \t——制表符tab
- \v——垂直制表符
定义常量:
#define // #undef WIDTH 5,取消定义。
1 #include <iostream> 2 using namespace std; 3 4 #define LENGTH 10 5 #define WIDTH 5 6 #define NEWLINE '\n' 7 8 int main() 9 { 10 11 int area; 12 13 area = LENGTH * WIDTH; 14 cout << area; 15 cout << NEWLINE; 16 return 0; 17 }
const关键字
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 const int LENGTH = 10; 7 const int WIDTH = 5; 8 const char NEWLINE = '\n'; 9 int area; 10 11 area = LENGTH * WIDTH; 12 cout << area; 13 cout << NEWLINE; 14 return 0; 15 } 16