C++从0到1的入门级教学(二)——数据类型

文章目录

  • 2 数据类型
    • 2.1 简单变量
    • 2.2 基本数据类型
      • 2.2.1 整型
      • 2.2.2 实型(浮点型)
      • 2.2.3 字符型
      • 2.2.4 布尔类型
    • 2.3 sizeof关键字
    • 2.4 类型转换
    • 2.5 转义字符
    • 2.6 重新谈及变量
      • 2.6.1 字面值常量
      • 2.6.2 变量
      • 2.6.3 列表初始化
    • 2.7 数据的输入

2 数据类型

2.1 简单变量

程序通常都需要存储信息,而当我们把信息存储在计算机中,程序必须记录3个基本属性:

  1. 信息要存储在哪里?
  2. 要存储什么值?
  3. 存储何种类型的信息

C++规定在创建一个变量或者常量时,必须要指定相应的数据类型,否则无法给变量分配内存。

image-20211028102451552

那上面这个图来举例,我们给利用int指定系统给变量开辟多大的空间,10用来往空间里面存放数据,而a作为变量名用来操纵这个数据,虽然C++没有告诉你这个值存储在内存的什么位置,但程序确实记录了这个位置,如果你想查看这个值所在的内存地址,你只需要用&即可访问。

由此可知,数据类型存在的意义是给变量分配合适的内存空间。

面向对象编程的本质是设计并扩展自己的数据类型,设计自己的数据类型就是让类型与数据匹配。如果正确做到了这一点,以后使用自己的数据类型会方便很多。然而,在创建自己的类型之前,必须先了解一些C++内置的基本类型:如整数、浮点数。但是C++提供了多种变体,包括数组、字符串、指针和结构体等。

2.2 基本数据类型

2.2.1 整型

整型变量表示的是整数类型的数据,而需要注意的是,整型也有划分,分为带符号(signed)无符号(unsigned)。带符号指的就是带正负号的那种,无符号就是只能表示0和大于0的数了。

C++中能够表示整型的类型由以下几种方式,区别在于所占内存空间不同:

数据类型占用字节取值范围
short(短整型)2(-2^15 ~ 2^15-1)
int(整型)4(-2^31 ~ 2^31-1)
long(长整型)window为4,linux为4(32位),8(64位)(-2^31 ~ 2^31-1)
long long(长长整型)8(-2^63 ~ 2^63-1)

如果想要得到无符号类型,只需在有符号类型的数据类型前添加unsigned关键字即可。

如何选择

很多人都会发懵,对于Java来讲并没有这么多数据类型,而对于C++却有,这是因为C++要尽可能地去接近硬件,为此,C++的数据类型比其他的高级编程语言数据类型要多得多。

那在定义的时候,我们应该如何需选择数据类型呢?

  • 在知晓数值不可能为负时,我们可以选用无符号类型
  • 如果数值很大,超出了int的范围,那可以选择long
  • 使用浮点数尽量用double,不要用float,因为float精度不够而且运算double和float的代价差别不大。

位和字节

计算机内存由一些叫位的单元组成,C++中的这些整型都通过使用不同数目的位来存储值。如果我们用位来衡量上面的数据类型,那么:

数据类型占用位
short至少16位
int至少和short一样长
long至少32位
long long至少64位

前面说到的位(Bit)可以当做电子开关,可以开可以关,关表示0,开表示1;比如8位的内存,1位就能0和1,那么8位就是282^828即256。所以8位的单元可以理解为0 ~ 255或者-128 ~ 127,按刚才的理解的话,每增加一位,组合数翻倍。

字节(byte)通常指的是8位的内存单元。从这个意义来说,字节指的是描述计算机内存量的度量单位,1KB等于1024字节,1MB等于1024KB。

2.2.2 实型(浮点型)

浮点型用于表示小数,浮点型变量分为两种:

  • 单精度float

  • 双精度double

两者的区别在于表示的有效数字范围不同。

数据类型占用字节有效数字范围
float47位有效数字
double815-16位有效数字

实例:

#include <iostream>
using namespace std;int main() 
{//1、单精度 float//2、双精度 doublefloat f1 = 3.14f;cout << "f1 = " << f1 << endl;double d1 = 3.14;cout << "d1 = " << d1 << endl;cout << "float sizeof = " << sizeof(f1) << endl;cout << "double sizeof = " << sizeof(d1) << endl;//科学计数法float f2 = 3e2;//3*10^2cout << "f2 = " << f2 << endl;float f3 = 3e-2;//3*0.1^2cout << "f3 = " << f3 << endl;system("pause");return 0;
}

2.2.3 字符型

单引号括起来的单个字符我们一般叫做char型字面值,如:‘a’。

字符型变量用于显示单个字符。其表示为:char ch = 'a'

这种表示方法有几个注意的点:

  • 在显示字符型变量时,用单引号将字符括起来,不要用双引号
  • 单引号内只能有一个字符,不可以是字符串
  • C和C++中字符型变量只占用一个字节
  • 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入存储单元。

ASCII

实际上,在美国最常用的符号集是ASCII字符集,但是C++实现使用的是其主机系统的编码,例如IBM大型机使用EBCDIC编码。

在下面的代码中,让我们仔细体会字符型变量创建的方法、字符型变量所占内存的大小、容易犯的一些错误,以及字符型变量对应ASCII编码。

#include <iostream>
using namespace std;int main() 
{//1、字符型变量创建方式char ch = 'a';cout << ch << endl;//2、字符型变量所占内存大小cout << "char ch sizeof = " << sizeof(ch) << endl;//3、字符型变量常见错误//char ch2 = "b";//创建字符型变量的时候,要用单引号//char ch2 = 'abcdef'; //创建字符型变量的时候,单引号内只能有一个字符//4、字符型变量对应ASCII编码//a - 97cout << (int)ch << endl;system("pause");return 0;
}

out:

image-20220422101821750

2.2.4 布尔类型

布尔数据类型代表真或假的值,其只有两种值:

  • true:真(本质是1)
  • false:假(本质是0)

如果当你定义了一个布尔类型,而后复制给其大于1的数如42,那么在输出时它会默认转为1,相当于true。

试着敲一下下面的代码,你可以体会到我说的话。

#include <iostream>
using namespace std;int main()
{bool a = 42;//a为真cout << a << endl;bool b = true;//b为真cout << b << endl;bool c = false;//c为假cout << c << endl;system("pause");return 0;
}

out:

image-20220422100223260

2.3 sizeof关键字

利用sizeof关键字可以统计数据类型所占内存大小,基本语法为:sizeof(数据类型/变量)

让我们试着动一下手体会其用法。

#include <iostream>
using namespace std;int main() 
{//1、短整型short num1 = 10;cout << sizeof(num1) << endl;//2、整型int num2 = 10;cout << sizeof(num2) << endl;//3、长整型long num3 = 10;cout << sizeof(num3) << endl;//4、长长整型long long num4 = 10;cout << sizeof(num4) << endl;system("pause");return 0;
}

out:

image-20220422094833636

以上的只是整型,我们再看看浮点型和字符型还有布尔类型所占的大小是多少。

#include <iostream>
using namespace std;int main()
{char a = 'A';float b = 2.03;double c = 2.03;bool d = true;cout << "字符型变量的大小:" << sizeof(a) << endl;cout << "单精度浮点型变量的大小:" << sizeof(b) << endl;cout << "双精度浮点型变量的大小:" << sizeof(c) << endl;cout << "布尔型变量的大小:" << sizeof(d) << endl;
}

out:

image-20220422105753875

2.4 类型转换

不同的对象类型是可以被转换的。当你定义变量时等号左右的数据类型表示的是不一样的东西时,C++会隐式地帮你做一个转换,当然,得能转换才行。

当然,你也可以采用显示转换,用数据类型(要转换的数据)这样的格式去显示转换数据。

#include <iostream>
using namespace std;int main()
{float b = int(2.03);cout << b << endl;
}

out:

image-20220422110508253

2.5 转义字符

在C++以及其他编程语言中,都有一些字符是打印不出来的,它们常常有特殊的含义。如果想要打印这些字符,就得在字符前加上特定的转义符号。

符号说明
\n换行符
\v纵向制表符
\ \反斜线
\r回车符
\t横向制表符
\b退格符
?问号
\f进纸符
\a报警符
\ "双引号
\ ’单引号

我们试着敲一段代码,它能帮我们理顺上述说的东西。

#include <iostream>
using namespace std;int main()
{char str = '\"';cout << str << endl;char str1 = '\?';cout << str1 << endl;system("pause");return 0;
}

out:

image-20220422102546965

2.6 重新谈及变量

2.6.1 字面值常量

在谈到变量前,我们需要知道什么叫字面值常量。

字面值常量就是字面上的常量,如随意给出一个数据42,‘a’,我们没有指定数据类型,只给出了个数据,那么它就是一种字面值常量。

需要知道的是,字面值常量通常直接就可以看出其所对应的数据类型。如’a’从形式上看,用了单引号,而且只用了一个字母,应该就是字符型变量。

2.6.2 变量

变量提供了一个名字和空间,空间中放着数据。我们上述提到的所有数据类型都可以决定变量所占内存空间大小和布局。

对于C++程序员来说,变量和对象两个术语一般可以交替使用。

变量一般命名都是以数据类型说明符开始,随后紧跟一个或多个变量名,多个变量名间以逗号隔开,最后以分号结束。定义的时候,我们还可以为多个变量同时赋值。

我们试着敲一下下面的代码,体会我说的话。

#include <iostream>
using namespace std;int main()
{int a = 1;int b = 10, c = 20;cout << a << endl;cout << b << endl;cout << c << endl;
}

在创建变量时,需要注意的一点是一定要初始化,即赋予变量一个初值。如果不赋予初值,后续的程序极有可能出问题。初值可以是一个确定的字面值也可以是一个复杂表达式。

赋值和初始化

其实根本无需追究两术语的差别。赋值指的是擦除当前变量中的值换一个值,而初始化是创建变量时赋予的初值。

初始化并不是必须的,你也可以不初始化,编译器不会报错,它会帮你生成一个初值,int整型会生成0,char会生成空字符串,但是一般没人会去这么干,我也不推荐你这么干。

你可以试着敲一下以下的代码体会一下,这个可能会在考试中出现,但开发就别这么干了。

#include <iostream>
using namespace std;
string global_str;
int global_int;
double global_double;int main()
{cout << global_int << endl;cout << global_str << endl;cout << global_double << endl;
}

out:

image-20220422104604045

2.6.3 列表初始化

在C++11的新标准中,首次出现了采用花括号来初始化变量的这一问题。如下所示,四种初始化方式是等价的。

#include <iostream>
using namespace std;int main()
{int a = 0;int b = { 0 };int c{ 0 };int d(0);cout << a << endl;cout << b << endl;cout << c << endl;cout << d << endl;
}

out:

image-20220422103951711

2.7 数据的输入

作用:用于从键盘获取数据

关键字:cin

语法cin>>变量

示例

#include <iostream>
#include <string>
using namespace std;
int main() 
{//1、整型int a = 0;cout << "请给整型变量a赋值:" << endl;cin >> a;cout << "整型变量a = " << a << endl;//2、浮点型float f = 3.14f;cout << "请给浮点型变量赋值:" << endl;cin >> f;cout << "浮点型变量f = " << f << endl;//3、字符型char ch = 'a';cout << "请给字符型变量ch赋值:" << endl;cin >> ch;cout << "字符型变量f = " << ch << endl;//4、字符串型string str = "hello world";cout << "请给字符串str赋值:" << endl;cin >> str;cout << "字符串str" << str << endl;//5、布尔类型bool flag = false;cout << "请给布尔类型flag赋值" << flag << endl;cin >> flag;cout << "布尔类型flag = " << flag << endl;//只要非零的数都是真system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数乘法

很久没手写过大数运算了&#xff0c;以前也都是直接贴模板的&#xff0c;今晚的模拟笔试最后一道大数乘法就没调好&#xff0c;gg…… #include <iostream> #include <string> #include <cstdio> #include <cstring> using namespace std;string num1,…

获取class的名字

ele str.get_attribute(class)&#xff08;获取class的名字&#xff09;转载于:https://www.cnblogs.com/zero-77/p/8482362.html

为什么下了android 4.1 的SDK后在本地用浏览器看api说明文档时,浏览器打开api的html文件很慢?试了好几款浏览器都一样。为什么?...

http://www.oschina.net/question/436724_61401 http://www.google.com/jsapi 他惹的祸 注释掉就可以了&#xff5e; <!-- <script src"http://www.google.com/jsapi" type"text/javascript"></script> --> 很多页面都有&#xff0c;…

深度学习修炼(三)——自动求导机制

文章目录致谢3 自动求导机制3.1 传播机制与计算图3.1.1 前向传播3.1.2 反向传播3.2 自动求导3.3 再来做一次3.4 线性回归3.4.1 回归3.4.2 线性回归的基本元素3.4.3 线性模型3.4.4 线性回归的实现3.4.4.1 获取数据集3.4.4.2 模型搭建3.4.4.3 损失函数3.4.4.4 训练模型3.5 后记致…

5、android使用意图传递数据之全局变量传递

实例&#xff1a; 1、layout的代码 activity_main.xml     <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" xmlns:tools"http://schemas.android.com/tools" android:layout_width"match_parent" android:lay…

安装rf所需要的库

1. RF 在两个Python中安装 robotframework 执行命令 pip install robotframework 2. seleniumlibrary 在两个Python中安装 seleniumlibrary 执行命令 pip install --pre --upgrade robotframework-seleniumlibrary 3. RIDE 在Python2中安装 RIDE 执行命令 pip install robot…

CNN for Visual Recognition (assignment1_Q1)

参考&#xff1a;http://cs231n.github.io/assignment1/ Q1: k-Nearest Neighbor classifier (30 points) 1 import numpy as np2 from matplotlib.cbook import todate3 4 class KNearestNeighbor:5 """ a kNN classifier with L2 distance ""&quo…

深度学习修炼(四)——补充知识

文章目录致谢4 补充知识4.1 微积分4.1.1 导数和微分4.1.2 偏导数4.1.3 梯度4.1.4 链式求导4.2 Hub模块致谢 导数与微分到底有什么区别&#xff1f; - 知乎 (zhihu.com) 4 补充知识 在这一小节的学习中&#xff0c;我们会对上一小节的知识点做一个补充&#xff0c;并且拓展一个…

java使用POI jar包读写xls文件

主要使用poi jar来操作excel文件。代码中用到的数据库表信息见ORACLE之表。使用public ArrayList<Person> getPersonAllRecords()获得所有的记录。 1 public class PersonXLS {2 3 public static void main(String[] args) throws IOException {4 5 …

U-boot 打补丁,编译,设置环境变量,

&#xff08;1&#xff09;U-boot 的最终目的是&#xff1a; 启动内核 U-boot 从Flash上读取内核&#xff0c;把内核放到SDRAM上&#xff0c;运行内核 设置环境变量 print  显示出环境变量 set bootdelay 10 save reset  重启转载于:https://www.cnblogs.com/bkyysd/p/42…

深度学习修炼(五)——基于pytorch神经网络模型进行气温预测

文章目录5 基于pytorch神经网络模型进行气温预测5.1 实现前的知识补充5.1.1 神经网络的表示5.1.2 隐藏层5.1.3 线性模型出错5.1.4 在网络中加入隐藏层5.1.5 激活函数5.1.6 小批量随机梯度下降5.2 实现的过程5.2.1 预处理5.2.2 搭建网络模型5.3 简化实现5.4 评估模型5 基于pytor…

Android 应用程序集成FaceBook 登录及二次封装

1、首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台 https://developers.facebook.com/apps 2、创建账号并且获得 APP ID 图一 图二 图三 图四 图五 3、获取app签名的Key Hashes 值&#xff08;两种方式&#xff09; 3.1方法1&#xff1…

IKAnalyzer进行中文分词和去停用词

最近学习主题模型pLSA、LDA&#xff0c;就想拿来试试中文。首先就是找文本进行切词、去停用词等预处理&#xff0c;这里我找了开源工具IKAnalyzer2012&#xff0c;下载地址&#xff1a;(&#xff1a;(注意&#xff1a;这里尽量下载最新版本&#xff0c;我这里用的IKAnalyzer201…

C++从0到1的入门级教学(六)——函数

文章目录6 函数6.1 概述6.2 函数的定义6.3 函数的调用6.4 值传递6.5 函数的常见形式6.6 函数的声明6.7 函数的分文件编写6 函数 6.1 概述 作用&#xff1a;将一段经常使用的代码封装起来&#xff0c;减少重复代码。 一个较大的程序&#xff0c;一般分为若干个程序块&#xf…

PC实用手册

为什么80%的码农都做不了架构师&#xff1f;>>> ##Win10除了Edge/IE&#xff0c;其他浏览器打开和载入速度都很慢 解决办法&#xff1a;以管理员身份运行cmd&#xff0c;输入netsh winsock reset重置winsock&#xff0c;然后重启电脑即可 转载于:https://my.oschin…

MySQL之表的约束

一 介绍 约束条件与数据类型的宽度一样&#xff0c;都是可选参数 作用&#xff1a;用于保证数据的完整性和一致性主要分为&#xff1a; PRIMARY KEY (PK) 标识该字段为该表的主键&#xff0c;可以唯一的标识记录 FOREIGN KEY (FK) 标识该字段为该表的外键 NOT NULL 标…

eclipse静态部署tomcat

转载于:https://www.cnblogs.com/sprinng/p/4223798.html

jvm fastdebug

背景 RednaxelaFX 写道agapple 写道还有一个问题&#xff0c;就是在验证一些逃逸优化时&#xff0c;有些jvm参数用不了&#xff0c;比如-XX:printInlining&#xff0c;-XX:printAssembly&#xff0c;jdk用的是1.6.11和jdk1.6.18-XX:PrintInlining在product build的Sun JDK上可以…

设计模式杂谈(一)——设计模式概述

文章目录1 设计模式概述1.1 软件设计模式的产生背景1.2 软件设计模式的概念1.3 设计模式的必要性1.4 设计模式分类1 设计模式概述 1.1 软件设计模式的产生背景 设计模式最初并不是在软件设计中&#xff0c;而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚…

hmailserver批量添加用户

2019独角兽企业重金招聘Python工程师标准>>> 将内容复制到txt文件中后缀改为vbs 将用户名密码替换为自己的 脚本内容如下: Option Explicit On Error resume nextDim obBaseApp Dim objFSO Dim objTextFile Dim strNewAlias,iDim scrreport Dim failed Dim added fa…