C++基础知识——数据类型和变量

一.数据类型

   现实社会中的人,分成很多“类型”,正所谓“物以类聚,人以群分”,不同类型的人,思考问题,处理的问题的方式都不一样,不同的数据类型,计算机内的处理的方式也是不同的。

   计算机内的数据,也分成很多类型:

intunsigned intchar
unsigned charlonglong long
unsigned longshortunsigned short
floatdouble各类指针类型
枚举类型struct 结构类型union 联合类型
boolstring

   不同数据类型的区别:1.表示意义不同

                                       2.占用内存不同

                                       3.表示的范围不同

                                       4.使用方法不同

二.变量

   变量是构建IT大厦的砖块。

 1.为什么使用变量

   程序在运行中,需要保存很多内容常常变化的数据。比如,射击类的游戏中不断变化的“击杀数”和“死亡数”。一个程序运行时,大量数据存储在“变量”中。数据在大量变量之间“计算”、“交换”,变量是处理数据的基本实体。

2.变量是什么

   变量,是内存中的一块存储空间,即一小块内存。

3.变量和数据类型的关系

变量是一个盒子,盒子里保存了“数据”,数据又分成很多“类型”(数据类型)。

(1) 变量的类型就是变量中数据的“类型”。

(2) 变量在定义(创建)时,必须先指定它的类型。【相当于制作一个盒子时,必须先确认这个盒子是用来装什么的】。 

(3) 1个变量只有一个类型,而且不能改成其他类型。 

4.变量的定义

定义形式 1:int x;

                     int y;

定义形式2:(不推荐)

                     int x , y;

定义形式3:(定义的时候,设置一个初始值)

                     int x = 100;

int a; //定义了一个变量
a = 100;

内存的存储单位-“字节”,一个字节包括八个二进制位。

5.变量的命名规范

(1) 只能包含 3 种字符(数字、大/小写字母,下划线)

(2) 不能以数字开头(即,只能以字母或下划线开头) 

     int 2name; //非法

(3) 不能和“关键字”同名(C语言内部已经使用的“名称”),比如类型名 int

   变量名的最大长度,C语言没有明确规定。最大长度限制,取决于编译器,一般都在32以上。同时变量名最好“见名知意”,不再使用汉语拼音的简写和缩写。

命名风格:

1) 下划线风格

int student_age;(一般用于变量名、函数名)

2) 小驼峰风格:第一个单词之后的单词大写

int studentAge;(一般位于变量名、函数名)

3) 大驼峰风格:从第一个单词开始大写

class StudentAge;(一般用于“类名”)。

4)全部大写(一般用于“宏”)

#define MAX_AGE 30

三.用于计数的整数类型

1.int 类型

   使用最多的整数类型,在内存中占用 4 个字节,表示范围 -2^31 ~ 2^31 - 1。【正负21亿左右】

2.long 长整型

   long 也就是 long int 可用来存储最大的整数。在 32 位系统上,占 4 个字节,和 int 相同。在64位系统上,占 8 个字节【正负 9 百亿亿左右】

3.long long 长长整型

   用来存储整数,在内存中占 8 字节,很少使用,仅用于特殊的运算。

4.short 短整型

   用来存储整数。在内存上 2 字节,用于存储小范围的整数,表示范围 -2^15 ~ 2^15 - 1【正负三万多】

5.无符号数  

   在类型前加上 unsigned ,例如 unsinged int,unsigned long,unsigned long long,unsigned short。最小值都是0,最大值是对应的有符号数的2倍,原理如下。

                                                                                                                   

四.用于单个字符的数据类型

   字符类型:char。 占用一个字节。

   char name = 'a';

   内存示意图:

PS:字符的实际表示:

所有的字符,使用对应的 ASCII 值来存储。为什么呢?因为计算机中只能存储 0 和 1 的组合。

ASCII 码,使用 1 个字节(包含 8 个二进制位,即 8 个 0 和 1 的组合)

比如:'A',用 0100 0001 来表示,就是65

           'B',用 0100 0010 来表示,就是66 

char name = 'a';

char name = 'a'; 等效于 char name = '97'; 

char 类型的另一种用法:用来表示小范围的整数。

实例:int x = 0;

           x = 'a' + 1; // 97 + 1

五.用于精确计算的数据类型

   需要精确计算的数字,工程应用,用整数类型并不合适。 

1. float 类型 (单精度浮点数类型) 

   用来存储带小数部分的数据。在内存中占 4 个字节。表示范围:-3.4*10^38 ~ 3.4*10^38。精度:最长 7 位有效数字(7 位10 进制位)。

   float y = 1.123456789; // 精度只能取到 1.1234568,在第 7 位(整数部位不算)是四舍五入后的值。

   float 类型的存储方式:

符号位:0 表示正数,1 表示负数

阶码:指数 + 127

转化过程:13.625的转化

2. double 类型(双精度类型)

   用来存储小数部分的数据,8 个字节。具体的存储类型和 float 相似。但是阶码为 11 位,尾数为52位。

   表示范围:-1.7 * 10 ^ 308 ~ 1.7 * 10 ^ 308

   精度:最长 16 位有效数字

   double y = 1.12345678901;

3.浮点类型的常量

   带小数的常量默认都是 double 类型

   3.14 是 double 类型

   3.14f 强制为 float 类型

   可以用“科学计数法”表示浮点类型的常量,1.75E 或 1.75e ,1.75e 就是 1.75 乘以 10 的 5 次方(100000),175000.0

   注意:

   1 是 int 类型的常量

   1.0 是 double 类型的常量

4.浮点数据的输出控制

   一般,浮点数的默认精度就是6,为了符合实际开发,我们就需要修改浮点数的精度。

#include <iostream>
#include <Windows.h>

using namespace std;

int main(void) {
	double value = 12.3456789;
	
	// 默认精度是6,所以输出为 12.3457
	//(默认情况下,精度是指总的有效数字)
	cout << value << endl;

	// 把精度修改为4,输出 12.35,对最后一位四舍五入
	// 精度修改后,持续有效,直到精度再次被修改
	cout.precision(4);
	cout << value << endl;

	// 使用定点法,精度变成小数点后面的位数
	// 输出 12.3457
	cout.flags(cout.fixed);
	cout << value << endl;

	// 定点法持续有效
	// 输出 3.1416
	cout << 3.1415926535 << endl;

	// 把精度恢复成有效数字位数
	cout.unsetf(cout.fixed);
	cout << value << endl;		  //输出 12.35
	cout << 3.1415926535 << endl; //输出 3.142

	system("pause");
	return 0;
}

   cout.precision(4) 表示将精度修改为4,输出数字的总共位数就是4,精度修改后持续有效,直到精度再一次被修改。

   cout.flags(cout.fixed) 表示定点法,精度修改为小数点后面的位数,也就是输出小数点后四位。

   cout.unsetf(cout.fixed) 表示将精度恢复成有效数字位数。

 

六.常量

   将一个比较容易让人迷糊的问题。

1. 字面常量

int 型字面常量:1,2,3,100。

long 型字面常量:200L(或者200l,建议使用大写字母L)。

 long long 型字面常量:1000000000000LL(建议使用大写字母LL)。

char 型字面常量:'a','b','X','-'。

float 型字面常量:3.14f (变量和常量是有区别的)。

double 类型常量:3.0,3.14

2. 16进制常量

   以 0x 作为前缀。

   123 = 1*100 + 2*10 + 3*1

   0x11 = 1*1 + 16*1 = 17(十进制)

10 进制0123456789101112131415
16 进制012345678910ABCDE

3. 8 进制常量

   以 0 作为前缀。

   011 相当于 9。 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值