变量、变量类型与cin的基本用法详解(C++)
目录
变量和变量类型的概念
定义变量的方法
变量类型之间的转换(强转和自转)
常用的变量类型
数据类型的长度
字符型变量和整型变量的转换
cin的使用方法
变量和变量类型的概念
你可能觉得这个“Hellow World”程序用处不大。我们写了好几行代码,编译,然后执行生成的程序只是为了在屏幕上看到一句话。的确编程并不仅限于在屏幕上打出文字这么简单的工作。为了能够进一步写出可以执行更有用的任务的程序,我们需要引入变量(variable)这个的概念
让我们设想这样一个例子,我要求你在脑子里记住5这个数字,然后再记住2这个数字。你已经存储了两个数值在你的记忆里。现在我要求你在我说的第一个数值上加1,你应该保留6 (即5+1)和2在你的记忆里。现在如果我们将两数相减可以得到结果4。
所有这些你在脑子里做的事情与计算机用两个变量可以做的事情非常相似。同样的处理过程用C++来表示可以写成下面一段代码:
a = 5;b = 2;a = a + 1;result = a - b;
很明显这是一个很简单的例子,因为我们只用了两个小的整数数值。但是想一想你的电脑可以同时存储成千上万这样的数值,并进行复杂的数学运算。
因此,我们可以将变量(variable)定义为内存的一部分,用以存储一个确定的值。
每一个变量 (variable)需要一个标识,以便将它与其他变量相区别,例如,在前面的代码中,变量标识是a, b, 和result。我们可以给变量起任何名字,只要它们是有效的标识符。
所以变量的作用就相当于在计算机的内存中开辟了一个空间,然后给这个空间起个名字,a=5;就相当于把5存储到这个空间中了。
编程时我们将变量的值存储在计算机的内存中,但是计算机要知道我们要用这些变量存储什么样的值,因为一个简单的数值,一个字符,或一个巨大的数值在内存所占用的空间是不一样的。
存储小的数,开辟的空间大,那就是浪费空间。存储大的数,开辟的空间小,数据就会装不下。所以变量类型就出现了。根据不同的变量类型来开辟不同大小的空间。
定义变量的方法
在此先假设使用int的变量类型来定义变量。可以一行代码只定义一个变量:
int a;
int b;
int c;
也可以一行代码,连续定义多个变量,每个变量用逗号隔开:
int a,b,c;
定义变量的同时可以给变量一个值:
int a=10;
int a=5,b,c=20;
变量的命名规则:
1、变量名中只允许出现字母、数字和下划线
2、第一个字符不能是数字,2n是一个不合法的变量名
3、不能是C++关键字。所谓关键字,是C++中已经定义好了的有特殊含义的单词(如 int)
4、变量名称区分大小写,例如a和A是两个变量
5、为了便于阅读,变量名最好是使用有含义的单词或者单词组合,变量名不宜太长,太长容易写错,一般控制在15个字母内。
变量类型之间的转换(强转和自转)
本节所说的转换都是数值类型的变量之间的转换。
1、在赋值语句中,赋值运算符(=)左边的变量和右边运算的结果数据类型如果不一样的情况下,就会出现转换,右边的结果会被转换成左边的数据类型,然后赋值给左边的变量。
int a;
a=3.6;
一个int型的变量a,当给它赋值时,右边的结果会被转成整型3,然后赋值给变量a,这时a的值就是3。
int a;
a=3.6+6.2;
此时先计算赋值符号右边的计算结果:9.8,然后转换成9,再赋值给a。
浮点型转换成整型的过程中,都是去掉小数点后面的数。
2、在运算表达式的计算过程中也会出现类型的转换。
int a=2;
long long b=3;
double c=1.1;
long long d;
d=(a+b)*c;
cout<<d;
在计算(a+b)*c的过程中,先计算a+b的值,a是int型,b是long long型,所以计算机会将a的值转换成long long类型,然后得出long long类型的结果5,这个结果再乘以c,这时参与运算的两个值,一个是long long类型,一个是double类型,所以计算机会将long long类型的值转换成double类型,然后再计算,计算结果为:5.5的double类型。赋值给一个long long的类型,所以5.5被转换成了long long类型的5。
算术表达式中的类型转换按照从精度低到精度高。
运算过程中,整数型碰到浮点型,都转换成浮点型,整数类型之间按如下所示进行转换:
char->int->long long
浮点型之间进行转换,按如下进行:
float->double->long double
3、强制转换
除了上面说到的两种转换,我们还可以进行强制类型转换。
float a=2.1;
cout<<(int)a;
获取到a的值,然后将这个值强制转换成int型。注意是得到a的值,然后转换成int型,并没有改变a的类型。
或者
float a=2.3,b=5.9;
cout<<(int)(a+b);
(a+b)计算的结果强制转换成整数。a和b的类型也没有变化。
记住两点:
1、以上几种情况,在类型转换的过程中,被转换的变量其本身类型并没有变化。如
float a=2.3,b=5.9;(int)(a+b),
(a+b)的结果为8.2,这个值强制转换为int,值为8。但是这个转换不影响a,b它们本身的类型,它们仍为float,且a还是2.3,b还是5.9。
2、这种类型之间的转换,必须是兼容的转化,我们暂时只学习了数值类型,这些之间都是可以转换的。以后我们还会学习其他的类型,那些类型和现在的数值类型就不一定可以转换了。
常用的变量类型
变量类型也称数据类型。本次课主要学习的是数值类型。
数据是放在内存中的,变量是给这块内存起的名字,有了变量就可以找到并使用这份数据。但问题是,该如何使用呢?
我们知道,诸如数字、文字、符号、图形、音频、视频等数据都是以二进制形式存储在内存中的,它们并没有本质上的区别,那么,00010000 该理解为数字16呢,还是图像中某个像素的颜色呢,还是要发出某个声音呢?如果没有特别指明,我们并不知道。
也就是说,内存中的数据有多种解释方式,使用之前必须要确定;int a;
就表明,这份数据是整数,不能理解为像素、声音等。int 有一个专业的称呼,叫做数据类型(Data Type)。
顾名思义,数据类型用来说明数据的类型,确定了数据的解释方式,让计算机和我们不会产生歧义。在C++语言中,有多种数据类型,例如:
说 明 |
字符型 |
短整型 |
整型 |
长整型 |
单精度浮点型 |
双精度浮点型 |
数据类型 |
char |
short |
int |
long |
float |
double |
数据类型的长度
所谓数据长度(Length),是指数据占用多少个字节。占用的字节越多,能存储的数据就越多,对于数字来说,值就会更大,反之能存储的数据就有限。
多个数据在内存中是连续存储的,彼此之间没有明显的界限,如果不明确指明数据的长度,计算机就不知道何时存取结束。例如我们保存了一个整数 1000,它占用4个字节的内存,而读取时却认为它占用3个字节或5个字节,这显然是不正确的。
所以,在定义变量时还要指明数据的长度。而这恰恰是数据类型的另外一个作用。数据类型除了指明数据的解释方式,还指明了数据的长度。因为在C++语言中,每一种数据类型所占用的字节数都是固定的,知道了数据类型,也就知道了数据的长度。
在32位环境中,各种数据类型的长度一般如下:
说 明 |
字符型 |
短整型 |
整型 |
长整型 |
单精度浮点型 |
双精度浮点型 |
数据类型 |
char |
short |
int |
long |
float |
double |
长 度 |
1 |
2 |
4 |
8 |
4 |
8 |
short int long类型
整数是编程中常用的一种数据,C++语言通常使用int
来定义整数(int 是 integer 的简写)。我们来讲解一下int:
在现代操作系统中,int 一般占用 4 个字节(Byte)的内存,共计 32 位(Bit)。如果不考虑正负数,当所有的位都为 1 时它的值最大,为 232-1 = 4,294,967,295 ≈ 43亿,这是一个很大的数,实际开发中很少用到,而诸如 1、99、12098 等较小的数使用频率反而较高。
使用 4 个字节保存较小的整数绰绰有余,会空闲出两三个字节来,这些字节就白白浪费掉了,不能再被其他数据使用。现在个人电脑的内存都比较大了,配置低的也有 2G,浪费一些内存不会带来明显的损失;而在C语言被发明的早期,或者在单片机和嵌入式系统中,内存都是非常稀缺的资源,所有的程序都在尽力节省内存。
反过来说,43 亿虽然已经很大,但要表示全球人口数量还是不够,必须要让整数占用更多的内存,才能表示更大的值,比如占用 6 个字节或者 8 个字节。
让整数占用更少的内存可以在 int 前边加 short,让整数占用更多的内存可以在 int 前边加 long,例如:
short int a = 10;
short int b, c = 99;
long int m = 102023;
long int n, p = 562131;
这样 a、b、c 只占用 2 个字节的内存,而 m、n、p 可能会占用 8 个字节的内存。
也可以将 int 省略,只写 short 和 long,如下所示:
short a = 10;
short b, c = 99;
long m = 102023;
long n, p = 562131;
这样的写法更加简洁,实际编程中常用。(我们在实际的操作中通常使用的都是int类型,除非数据特别大的情况下会使用long类型,short类型很少使用)
int 是基本的整数类型,short 和 long 是在 int 的基础上进行的扩展,short 可以节省内存,long 可以容纳更大的值。
short、int、long 是C语言中常见的整数类型,其中 int 称为整型,short 称为短整型,long 称为长整型。
bool类型
bool的值只能是0和1,有的同学或许会认为,那这种类型的变量只需要占用一位就可以了,因为使用1位就可以表示0和1了。其实不然,bool类型占用了一个字节(8位),但是只有最低位使用到了。在后面选择语句的学习中,我们将更进一步认识到bool类型的作用。
float和double类型
小数分为整数部分和小数部分,它们由点号.
分隔,例如 0.0、75.0、4.023、0.27、-937.198 -0.27 等都是合法的小数,这是最常见的小数形式,我们将它称为十进制形式。
此外,小数也可以采用指数形式,例如 7.25×102、0.0368×105、100.22×10-2、-27.36×10-3 等。任何小数都可以用指数形式来表示。
C++语言中常用的小数有两种类型,分别是 float 或 double;float 称为单精度浮点型,double 称为双精度浮点型。不像整数,小数没有那么多幺蛾子,小数的长度是固定的,float 始终占用4个字节,double 始终占用8个字节。
char类型,我们在后面单独讲解。
字符型变量和整型变量的转换
前面我们多次提到了字符串,字符串是多个字符的集合,它们由" "
包围,例如"hello world!"
、"你好"
。字符串中的字符在内存中按照次序、紧挨着排列,整个字符串占用一块连续的内存。
当然,字符串也可以只包含一个字符,例如"A"
、"6"
;不过为了操作方便,我们一般使用专门的字符类型来处理。
初学者经常用到的字符类型是 char,它的长度是 1,只能容纳 ASCII 码表中的字符,也就是英文字符。
我们知道,计算机在存储字符时并不是真的要存储字符实体,而是存储该字符在字符集中的编号(也可以叫编码值)。对于 char 类型来说,它实际上存储的就是字符的 ASCII 码。
我们看看ASCII码表,不需要记住:
ASCII值 |
控制字符 |
ASCII值 |
控制字符 |
ASCII值 |
控制字符 |
ASCII值 |
控制字符 |
0 |
NUT |
32 |
(space) |
64 |
@ |
96 |
、 |
1 |
SOH |
33 |
! |
65 |
A |
97 |
a |
2 |
STX |
34 |
" |
66 |
B |
98 |
b |
3 |
ETX |
35 |
# |
67 |
C |
99 |
c |
4 |
EOT |
36 |
$ |
68 |
D |
100 |
d |
5 |
ENQ |
37 |
% |
69 |
E |
101 |
e |
6 |
ACK |
38 |
& |
70 |
F |
102 |
f |
7 |
BEL |
39 |
, |
71 |
G |
103 |
g |
8 |
BS |
40 |
( |
72 |
H |
104 |
h |
9 |
HT |
41 |
) |
73 |
I |
105 |
i |
10 |
LF |
42 |
* |
74 |
J |
106 |
j |
11 |
VT |
43 |
+ |
75 |
K |
107 |
k |
12 |
FF |
44 |
, |
76 |
L |
108 |
l |
13 |
CR |
45 |
- |
77 |
M |
109 |
m |
14 |
SO |
46 |
. |
78 |
N |
110 |
n |
15 |
SI |
47 |
/ |
79 |
O |
111 |
o |
16 |
DLE |
48 |
0 |
80 |
P |
112 |
p |
17 |
DCI |
49 |
1 |
81 |
Q |
113 |
q |
18 |
DC2 |
50 |
2 |
82 |
R |
114 |
r |
19 |
DC3 |
51 |
3 |
83 |
S |
115 |
s |
20 |
DC4 |
52 |
4 |
84 |
T |
116 |
t |
21 |
NAK |
53 |
5 |
85 |
U |
117 |
u |
22 |
SYN |
54 |
6 |
86 |
V |
118 |
v |
23 |
TB |
55 |
7 |
87 |
W |
119 |
w |
24 |
CAN |
56 |
8 |
88 |
X |
120 |
x |
25 |
EM |
57 |
9 |
89 |
Y |
121 |
y |
26 |
SUB |
58 |
: |
90 |
Z |
122 |
z |
27 |
ESC |
59 |
; |
91 |
[ |
123 |
{ |
28 |
FS |
60 |
< |
92 |
/ |
124 |
| |
29 |
GS |
61 |
= |
93 |
] |
125 |
} |
30 |
RS |
62 |
> |
94 |
^ |
126 |
` |
31 |
US |
63 |
? |
95 |
_ |
127 |
DEL |
我们看到经常使用的英文字母都对应一个ASCII码值,实际上计算机内存中存储的也是这些ASCII值。比如说字符A,它的ASCII码的值是65,那么在计算机中保存的就是65这个整数值。
字符类型由单引号' '
包围,字符串由双引号" "
包围。下面的例子演示了如何给 char 类型的变量赋值:
//正确的写法
char a = '1';
char b = '$';
char c = 'X';
char d = ' '; // 空格也是一个字符
//错误的写法
char x = '中'; //char 类型不能包含 ASCII 编码之外的字符
char y = 'A'; //A 是一个全角字符
char z = "t"; //字符类型应该由单引号包围
那么char和整型数据之间是如何转换的呢:
char转换成int,那么将得到对应的ascII码值。如 (int)'a' 得到的值是97。int转换成char,(char)105 得到字符‘i’。
char a='a';
cout<<a+2;
2是int型,a是char型,a+2的计算过程中,首先获取a的值,然后将其转换成int型值(即它的ascII码97),再相加,得到99,输出的就是99。
char a='a';
char b='z';
cout<<a+b;
a+b也是将a的ascII码和b的ascII码相加得到对应的整数值,然后输出这个整数值。
char a='a';
char b='z';
char c=a+b;
cout<<a+b;
a+b也是将a的ascII码和b的ascII码相加得到对应的整数值,然后再将这个整数值强制转化成char(即ascII码值所对应的字符)。
上面的表没必要背。记住0~9,a~z,A~Z这三组字符所对应的ascII码值都是连续的即可。
如果想知道‘a’所对应的ascII是多少,直接运行如下代码就能查看:
cout<<(int)'a';
若想知道某个ascII码对应的字符,则运行如下代码查看:
cout<<(char)99;
cin的使用方法
cin是iostream中的一个对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。这个对象是在名字空间std下面,所以没有使用 using namespace std的情况下,可以这样来使用cout(std::cin),否则可以直接使用(cout)。
使用cin从标准输入读取数据时,通常用到的方法有cin加上两个右尖括号(>>),即cin>>。
可以输入单个变量:
int a;
cin>>a;
也可以连续输入多个变量:
cin>>变量一>>变量二>>变量三>>变量四。。。;
cin可以连续从键盘读取想要的数据,以空格、tab或换行作为分隔符。
#include <iostream>
using namespace std;int main() {char a;int b;float c;cin >> a >> b >> c;cout << a << " " << b << " " << c << " " << endl;return 0;
}
变量、变量类型与cin的基本用法详解(C++)相关推荐
- getline()与cin.getline()函数用法详解
getline()函数可以让我们很方便的输入一串字符串.getline()不仅简单,而且安全,因为全局函数 getline() 会帮你处理缓冲区用完之类的麻烦.常见的getline()函数语法有两条: ...
- c语言getline作用,C++ cin.getline及getline()用法详解
下面先看下C++ cin.getline用法,具体内容如下所示: 使用 C++ 字符数组与使用 string 对象还有另一种不同的方式,就是在处理它们时必须使用不同的函数集.例如,要读取一行输入,必须 ...
- java 枚举类型enum的用法详解
Java Enum原理 public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要 ...
- 标称变量(Categorical Features)或者分类变量(Categorical Features)缺失值填补、详解及实战
标称变量(Categorical Features)或者分类变量(Categorical Features)缺失值填补.详解及实战 核心学习函数或者方法: KNeighborsClassifier() ...
- mysql decimal 类型_MySQL数据类型DECIMAL用法详解
MySQLDECIMAL数据类型用于在数据库中存储精确的数值.我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据. 要定义数据类型为DECIMAL的列,请使用以下语法: ...
- STL中map和string, vector 用法详解
1. map 用法详解 std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成 ...
- 转: std::string用法详解
原文地址为: 转: std::string用法详解 C++中的string 类 简单介绍 前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱 ...
- Java 注解用法详解——@SuppressWarnings
转自: https://www.cnblogs.com/fsjohnhuang/p/4040785.html Java魔法堂:注解用法详解--@SuppressWarnings 一.前言 编码时我们总 ...
- python3 isinstance用法_对python中assert、isinstance的用法详解
1. assert 函数说明: Assert statements are a convenient way to insert debugging assertions into a program ...
- extern用法详解(转)
extern用法详解(转) 1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern ...
最新文章
- SQL Server 查询性能优化——堆表、碎片与索引(一)
- 移动金融业务风控框架及设备风险识别的意义(下)
- Azure Show|第一期 开播啦!嘉宾梁迪李卓恒李佳芮
- leetcode article
- mybatis 多参数处理
- python自定义变量名标识符,【python】3 标识符和关键字
- Interpreting Attributions and Interactions of Adversarial Attacks论文解读
- 超火的ipad procreate必备神仙笔刷资源打包下载
- 人工智能、机器学习、神经网络和深度学习的发展历程(上)
- C语言牛顿迭代法求开平方
- Python地学分析 — GDAL通过矢量裁剪遥感图像
- Python的mpl_finance模块从2020年已经提醒弃用,新mplfinance模块详解(二)
- 航班时间(第九届蓝桥杯省赛C++A组)
- 期刊投稿状态_SCI期刊投稿各种状态详解
- ELF二进制目标文件详解
- NEON优化:性能优化常见问题QA
- MySQL DELETE 操作后没有释放磁盘空间
- linux mysql 软连接_linux 软连接的使用
- Kotlin第五章: android网络编程
- 解决win10系统无法通过usb共享手机网络