P2 C++变量

news2024/9/29 3:32:42

前言

一 C++变量的作用

本期我们来讨论一下c ++中的变量。

在一个 C++ 程序中,大部分内容实际上都是在使用数据。我们操作任何类型的数据,如包括我们想要改变、想要修改, 想要读和写数据。我们都需要把数据存储进叫做变量的东西里面。变量允许我们命名我们存储在内存中的数据。

1.1 举个例子变量的栗子

假设你正在制作一款游戏,角色在地图上有某种位置,角色可以移动,所以我们需要能够存储角色的位置,把角色放在屏幕上,这样角色才能与关卡的其他部分互动,我们也可以看到角色到底在哪里,我们想要用一个变量存储角色位置。

这是写所有程序的最基本的,无论任何编程语言,我们需要能够利用数据。将数据存储在某个地方。


 二 数据类型 

  2.1 常用的数据类型

当我们创建一个变量时,它将被存储在内存中的两个地方,堆和栈,那是我们实际存储数据的地方,我们有一堆原始数据类型,这些数据类型基本上构成了我们在程序中存的任何数据。

每种数据类型都有特定的用途,虽然它有特定的目的,实际上你也不一定就是用于这个目的,这意味着当你实际上做事的时候实很少有固定的规则。

类型关键字
布尔型bool
字符型char
整型int
浮点型float
双浮点型double
无类型void

不同变量类型之间的唯一区别,是这个类型数据在C++中这个变量会占用多少内存,这实际上是这些类型之间的唯一区别。 

2.2 unsigned的作用

int 类型可以存储介于 -20 亿到 +20 亿的值,所以你可能会说,为什么 -20 亿与 +20 亿?确切地说不是20亿,大概是 20 亿多点,这些限制从何而来,它们有意义吗,他们是有意义的。变量的类型大小与它能存储多大的数字直接相关,一个整数是 4 个字节,我们可以在这个范围内存储数字。让我们来具体分析一下。

一个字节是 8 比特的数据,这意味着 4 个字节是32位的数据,因为这个变量有符号,这意味着它可以是负的,它包含一个像负号一样的符号,因为这个变量有符号,这32 位中的一位表示符号,这样我们就知道了它是正的还是负的。实际数字只剩下 31 位。一个比特可以是0或者1,我们就还有31比特,2的31次方是多少? 2147483648,大概 21 亿。这21 亿是我们得到的能用 int 类型存储的最大值,记住,我们还有一个预留位,看这个数是否为负数,因此,这个数可以是从0到21亿的正值,从 -21 亿开始的负值。

但如果你不想要负值。有没有什么方法把这 1 个符号位去掉,然后把它作为数字的一部分?当然有的。就是我们所说的无符号数,unsigned number 。这意味着它是一个没有符号的数,它总是正值。 在 C++ 中我们可以在 int 前面输入 unsigned 来实现。 您还可以将 unsigned 添加到其中任意一种类型前,它会移除符号位,可以让你设置为一个更大的数字。

#include <iostream>
using namespace std;
 
// main() 是程序开始执行的地方
 
int main()
{
   unsigned int variable = 8;
   cout << "输出 Hello World"<< endl; // 输出 Hello World
   return 0;
}

2.3 char代表字符

为什么说 Char 是专门用来代表字符的?

举个例子,定义个char类型的变量data并赋值为65,按道理来说应该会打印65,但事实上并不是这样,看以下代码

#include <iostream>
using namespace std;
 
// main() 是程序开始执行的地方
 
int main()
{
   char  data  = 65;
   cout <<  data<< endl; 
   return 0;
}

 

打印结果是字符A ,但如果我将变量类型换为整形呢?然后给给整形变量赋值为'A'

#include <iostream>
using namespace std;
 
// main() 是程序开始执行的地方
 
int main()
{
   int  data  = 'A';
   cout <<  data<< endl; 
   return 0;
}

 结果打印的结果为65,而不是A

它会打印出数值,因为 cout 会把它当作一个int 类型。即使是将 'A'修改为 其他字符 ,也是一样的,可以试一下。

讲解这些是因为,我想让你们理解数据类型的使用取决于程序员,我们有一些既定的约定,但是却没有具体的东西需要你去遵循,在 C++中没有太多规则限制你,正因为如此, 我希望你们能意识到,这是这些数据类型之间唯一的区别,就是创建变量时通过数据类型将分配多少内存。

2.4 sizeof

我们说了那么多 size 大小和 bytes 字节,以及每个类型多大, 占据多少内存,我们如何知道一个数据究竟多大呢?毕竟,它依赖于编译器。有什么地方可以查一下吗,是的,我们有个操作符,在C++中使用 sizeof 操作符。

可以看到int类型 占了四个字节的内存,其他的变量类型也可以这样使用

后话:写这文章的时候不会全部的基础知识全部都写出来,网络上已经有很多教程,所有我才写了一些我比较容易忘记的和第一次见的

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

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

相关文章

万字解析设计模式之桥接模式、外观模式

一、桥接模式 1.1概述 桥接模式是一种结构型设计模式&#xff0c;它的作用是将抽象部分和实现部分分离开来&#xff0c;使它们能够独立地变化。这样&#xff0c;抽象部分和实现部分可以分别进行扩展&#xff0c;而不会相互影响。它是用组合关系代替继承关系来实现&#xff0c;…

如何在AIX操作系统上修改Java环境变量

AIX操作系统是IBM的Unix操作系统&#xff0c;通常用于企业级应用和服务器环境。在AIX上配置Java环境变量是执行Java应用程序和开发Java代码的重要步骤。本文将详细介绍如何在AIX上修改Java环境变量&#xff0c;并提供具体示例来帮助你完成这个任务。 步骤1&#xff1a;确定Java…

vue3组件外使用route

1.vue3组件外使用route 在写vue3项目时&#xff0c;有时候我们会把组件内部分逻辑代码分离到外部js中&#xff0c;然后在组件里通过import导入。此时如果我们要在组件外使用route对象&#xff0c;方式与组件内不同&#xff1a; 组件内&#xff1a; import { useRoute } from…

CANopen权威指南【CAN总线协议】

1这个总线定义是老外发明的。 想要使用&#xff0c;就必须按照协议去配置数据帧。 CIA301和cia402协议&#xff0c;实际就是寄存器地址上某一段的定义。 下载地址&#xff1a; CAN in Automation (CiA): Technical documents 注册下载也是非常快的。【没什么难度】 就是资…

基于Python(Pandas+Pyecharts)实现全国热门旅游景点数据可视化【500010037】

导入模块 import jieba import pandas as pd from collections import Counter from pyecharts.charts import Line,Pie,Scatter,Bar,Map,Grid from pyecharts.charts import WordCloud from pyecharts import options as opts from pyecharts.globals import ThemeType from…

【C++】map multimap

文章目录 1.map介绍2.map的使用3.multimap介绍4.multimap的使用 1.map介绍 map的文档 翻译&#xff1a; map是关联容器&#xff0c;它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。 在map中&#xff0c;键值key通常用于排序和惟一地标识元素&#x…

机器学习8:在病马数据集上进行算法比较(ROC曲线与AUC)

ROC曲线与AUC。使用不同的迭代次数&#xff08;基模型数量&#xff09;进行 Adaboost 模型训练&#xff0c;并记录每个模型的真阳性率和假阳性率&#xff0c;并绘制每个模型对应的 ROC 曲线&#xff0c;比较模型性能&#xff0c;输出 AUC 值最高的模型的迭代次数和 ROC 曲线。 …

编译器优化代码研究

《Effective C》条款21&#xff1a; /** * 结论&#xff1a;对自定义类型对象表达式objA*objB objC; * 定义friend MyInt operator*(const MyInt& lhs,const MyInt& rhs) * 编译器优化后&#xff1a;operator*()函数内直接在调用接收处构造(此处的匿名临时对象)&am…

万宾科技智能井盖传感器的特性一览

在不断发展的智慧城市技术领域&#xff0c;科学技术的创新永无止境。智能井盖传感器是科学进步带来的高科技产品&#xff0c;为促进城市生命线并保障地上地下连接点安全提供保障。它就在我们脚下&#xff0c;正在悄然改变城市基础设施和公共服务。智能井盖传感器成为现代城市规…

SD-WAN技术:重新定义网络连接方式

随着数字化转型的不断加速&#xff0c;企业对网络的需求呼之欲出。传统的WAN网络由于配置复杂、成本高昂以及带宽利用率低等问题而面临挑战。这时SD-WAN技术的出现正好派上了用场&#xff0c;通过其虚拟化、自动化和智能化的技术手段&#xff0c;大幅度提高了企业网络性能和可靠…

最新AIGC创作系统ChatGPT系统源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图,图片对话理解功能

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码

基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于晶体结构优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

系统之家U盘重装系统Win10方法步骤

用户发现自己电脑上的Win10系统出现问题了&#xff0c;想要通过重装系统来解决问题。但是&#xff0c;用户还不清楚具体重新安装Win10系统的步骤&#xff0c;接下来小编给大家详细介绍利用U盘完成Win10系统重装的方法&#xff0c;在这里用户需要下载系统之家装机大师软件&#…

Kubeadm部署Kubernetes Containerd集群

文章目录 概述一、硬件系统二、基础配置设置主机名配置主机名与IP地址解析关闭防火墙与selinux时间同步(ntp)升级系统内核配置内核转发及网桥过滤*安装ipset及ipvsadm关闭SWAP分区 三、Containerd准备Containerd获取下载解压Containerd配置文件生成并修改Containerd启动及开机自…

金蝶云星空套打设计平台导出套打模板和导入套打模板

文章目录 金蝶云星空套打设计平台导出套打模板和导入套打模板A环境导出套打模板B环境导入套打模板 金蝶云星空套打设计平台导出套打模板和导入套打模板 A环境导出套打模板 导出后&#xff1a; B环境导入套打模板 不要在已设计好的模板导入&#xff0c;会被覆盖 一定记得&am…

Java —— String类

目录 1. String类的重要性 2. 常用方法 2.1 字符串构造 2.2 String对象的比较 2.3 字符串查找 2.4 转化 1. 数值和字符串转化 2. 大小写转换 3. 字符串转数组 4. 格式化 2.5 字符串替换 2.6 字符串拆分 2.7 字符串截取 2.8 其他操作方法 2.9 字符串常量池 2.9.1 创建对象的思考…

程序员如何“升级打怪”?我用了这几个“歪瓜”!

不会吧&#xff1f;不会吧&#xff1f;计算机本命专业出身、以及半路出家的&#xff0c;混了几年了&#xff0c;还在新手村&#xff1f;对得起这几年摸的鱼&#xff1f; 思考一下&#xff1a;如何从小白一跃为大师&#xff0c;从此走上人生巅峰、迎娶白富美&#xff1f;变强只…

ArcGIS如何处理并加载Excel中坐标数据?

做GIS行业的各位肯定免不了跟数据打交道&#xff0c;其中数据的处理说复杂也复杂&#xff0c;因为我们要花时间去做数据的转换及调整工作&#xff0c;那说简单也简单&#xff0c;因为我们有很多的工具可以使用&#xff0c;那么今天我就给大家带来处理Excel中的GIS数据中的其中一…

时间序列预测(9) — Informer源码详解与运行

目录 1 源码解析 1.1 文件结构 1.2 mian_informer.py文件 1.3 模型训练 1.4 模型测试 1.5 模型预测 2 Informer模型 2.1 process_one_batch 2.2 Informer函数 2.3 DataEmbedding函数 2.4 ProbAttention稀疏注意力机制 2.5 Encoder编码器函数 2.6 Decoder解码器函数…

2023.11.20 关于 Spring MVC 详解

目录 MVC 工作流程 Spring MVC 掌握三个功能 创建 Spring MVC 项目 推荐安装插件 EditStarters 安装步骤 使用方法 实现连接功能 基础注解 RequestMapping 指定 GET 和 POST 方法类型 ResponseBody 获取参数 传递 单个 或 多个参数 参数重命名 RequestParam …