【从零开始入门unity游戏开发之——C#篇03】变量和常量

文章目录

  • 一、变量
    • 1、什么是变量?
    • 2、申明变量的固定写法
    • 3、变量的类型
      • 值和引用类型的区别
      • 无符号和有符号
      • 位——表示变量所占用的内存空间的大小
      • 范围——表示变量的取值范围
      • 取值范围和存储单位的关系
        • 为什么`byte`的范围是 0 到 255?
        • 为什么 `sbyte` 的范围是 -128 到 127?
    • 4、为什么要分这么多不同的变量类型?
    • 5、常用的变量类型
    • 6、变量命名规则
    • 7、float使用注意
  • 二、const常量
    • 1、什么是常量?
    • 2、常量的定义
    • 3、常量的特性
  • 专栏推荐
  • 完结

一、变量

1、什么是变量?

变量是计算机程序中的一种存储单元,它用于保存数据,并允许在程序中引用和修改这些数据。你可以把变量想象成“一个用来存储信息的小盒子”。在编程中,变量就是用来存放数据的地方,你可以在程序中给这个盒子命名,并将它装入不同的数据。之后,你可以随时查看、修改这个数据。

变量的本质就是存储数据的位置。它就像一张标签纸,你可以给它取个名字(变量名),然后写上信息(赋值),随时可以查看、修改这个信息(数据)。

比如

假设你有一个盒子(变量),叫做 age,它的作用就是存储一个年龄。你可以把数字 25 放进去,表示“年龄是 25”。然后,稍后你可以把它改成 30,表示年龄变了。

2、申明变量的固定写法

变量类型 变量名 = 初始值;

int i = 1;

当然我们也可以选择默认不赋初始值,后面再赋值,像这样

int i;i = 1;

一次性定义多个变量也可以简写

int a;
int b;//简写
int a, b;

3、变量的类型

C# 中的变量类型可以分为 值类型引用类型 两大类。

值类型

变量类型描述范围
byte无符号8位整数0 到 255
sbyte有符号8位整数-128 到 127
short有符号16位整数-32,768 到 32,767
ushort无符号16位整数0 到 65,535
int有符号32位整数-2,147,483,648 到 2,147,483,647
uint无符号32位整数0 到 4,294,967,295
long有符号64位整数-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
ulong无符号64位整数0 到 18,446,744,073,709,551,615
float32 位单精度浮点数±1.5 × 10^−45 到 ±3.4 × 10^38(精度约7位有效数字)
double64 位双精度浮点数±5.0 × 10^−324 到 ±1.7 × 10^308(精度约15–16位有效数字)
decimal128 位高精度小数±1.0 × 10^−28 到 ±7.9 × 10^28(精度约28–29位有效数字)
bool8 位布尔型truefalse
char16 位单一字符型Unicode字符(0 到 65,535)

引用类型

变量类型描述范围
string字符串任意长度的字符序列(理论上最多可达到 2GB)

值和引用类型的区别

这个内容比较复杂,我单独在下篇文章说明

无符号和有符号

  • 无符号表示能存储一定范围正数包括0的变量类型
  • 有符号表示能存储一定范围正负数包括0的变量类型

位——表示变量所占用的内存空间的大小

就是指定之前说的计算机中最小的数据存储单位——位(Bit),是指每种数据类型所占用的内存空间的大小。

注意:每种数据类型所占用的内存空间的大小是由 声明时 就已经决定的,与 赋值时的值的大小 无关。

例如

int smallNumber = 1;
int largeNumber = 10000;

在这两个例子中,smallNumber和largeNumber都是int类型的变量,它们分别存储了1和10000这两个值。但无论这两个变量的值是多少,它们在内存中都会各自占用4个字节(32位)的空间。

你可能会问为什么不根据数值大小动态分配空间?

如果你考虑过根据数值大小动态分配空间,这确实在某些情况下可以节省内存。然而,这样做会增加内存管理的复杂度,并可能降低程序的性能。固定大小的数据类型使得内存分配、读取和写入操作更加高效和简单。

范围——表示变量的取值范围

范围就是变量的取值范围,超出会报错

比如我定义一个byte类型变量,编辑器会报错
在这里插入图片描述
因为前面说了byte取值范围是0 到 255

取值范围和存储单位的关系

为什么byte的范围是 0 到 255?
  • 8位意味着它有 8 个二进制位(即 8 个数字),每个二进制位只能是 0 或 1。
  • 对于无符号整数,所有 8 位的组合都代表一个非负整数。因此,所有可能的二进制数值从 00000000 到 11111111 之间。

计算所有组合的范围:

  • 最小值:00000000(二进制)= 0(十进制)
  • 最大值:11111111(二进制)= 255(十进制)

所以,byte 类型的范围是从 0 到 255,包括这两个值。

为什么 sbyte 的范围是 -128 到 127?
  • 8位 表示它有 8 个二进制位,这意味着总共有 256 种可能的数值组合。
  • 由于 sbyte 是 有符号 类型,表示正负数需要用其中的一位来表示符号位(即正负号)。通常,符号位在最高位(最左边的位),其中:
    • 0 表示正数(或零)
    • 1 表示负数

计算 sbyte 的范围:

  • 最小值:由于最高位是符号位,最小值是 10000000(二进制),即 -128(十进制)。
  • 最大值:最大的正数是 01111111(二进制),即 127(十进制)。

因此,sbyte 类型的取值范围是 从 -128 到 127。

4、为什么要分这么多不同的变量类型?

C# 中不同类型的变量帮助程序在性能、类型安全、功能实现、可读性和可维护性等方面达到最佳平衡。合理选择数据类型不仅能提高程序的效率,还能让代码更具可读性,减少错误。因此,虽然 C# 中的类型众多,它们的存在是为了应对不同的编程需求,提供更加灵活、安全和高效的编程体验。

5、常用的变量类型

前面看到这么多变量类型要记,但是不用害怕,我们经常用的其实只有:
值类型:int float bool
引用类型:string

其他的基本都用不到,了解就行了

6、变量命名规则

  • 不能重名
  • 不能以数字开头
  • 不能使用程序关键字命名
  • 不能有特殊符号(下划线除外)

变量的命名其实是支持中文汉字的,比如

int 整数 = 100;

但是非常不建议的命名规则用汉字命名,有人喜欢用拼音其实我也不是很建议。虽然在特定的个人项目或局部环境中,使用汉字作为标识符可能短期内看起来更方便,但从长期来看,它带来的兼容性问题、可读性差、团队协作困难等问题,通常远远超过其带来的好处。因此,建议始终使用有意义的英语命名,遵循编程语言的命名规范,以确保代码的跨平台兼容性、可读性和可维护性。

7、float使用注意

C#小数默认是使用Double类型,所以直接赋值会报错,比如:
在这里插入图片描述
所以记得后面需要加上f才是float 类型

float f = 10.1f;

当然不是小数就可以不加f,但是为了统一规范,最好我们所有的float 类型变量赋值后面都加上f

float f1 = 0;
float f2 = -1;
float f3 = 1;float f4 = 0f;
float f5 = -1f;
float f6 = 1f;

二、const常量

1、什么是常量?

在 C# 中,常量(const)是一个值不可更改的变量。也就是说,一旦你为常量赋了初始值,这个值就不能再修改了。常量通常用于保存那些在程序运行时永远不变的值,比如数学常数(例如圆周率 π)或者配置参数。

2、常量的定义

在 C# 中,你可以通过关键字 const 来定义常量。例如:

const int MaxScore = 100;
const double Pi = 3.14159;
const string WelcomeMessage = "向宇的客栈";

在这些示例中:

  • MaxScore 是一个整数常量,值为 100。
  • Pi 是一个浮动常量,值为 3.14159。
  • WelcomeMessage 是一个字符串常量,值为 “向宇的客栈”。

其实可以简单的理解为在变量前面加一个const 关键字就是常量了

3、常量的特性

  • 不可修改:常量的值一旦赋值,就不能再更改。如果你尝试修改常量的值,编译器会报错。例如:
    在这里插入图片描述

  • 必须初始化:在定义常量时,你必须立即为其赋一个初始值。常量在声明时就要赋值,否则编译器会报错。例如:
    在这里插入图片描述

  • 只能是编译时常量:常量的值必须在编译时就已知,并且无法在程序运行时计算得出。例如:

    const int x = 5;
    const int y = x + 10;  // 可以,因为 5 和 10 在编译时已知
    

    但是,下面这种是不允许的:

    int z = 5;
    const int y = z + 10;  // 错误:常量值必须是编译时常量
    
  • 性能优化

    因为常量的值在编译时已确定,所以在运行时,C# 编译器会直接将常量值替换进代码中(通常是内联)。这有助于提升性能,尤其是当常量频繁使用时。


专栏推荐

地址
【从零开始入门unity游戏开发之——C#篇】
【从零开始入门unity游戏开发之——unity篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架开发】

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

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

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

相关文章

无人机推流直播平台EasyDSS视频技术如何助力冬季森林防火

冬季天干物燥,大风天气频繁,是森林火灾的高发期。相比传统的人力巡查,无人机具有更高的灵敏度和准确性,尤其在夜间或浓雾天气中,依然能有效地监测潜在火源。 无人机可以提供高空视角和实时图像传输,帮助巡…

Jenkins参数化构建详解(This project is parameterized)

本文详细介绍了Jenkins中不同类型的参数化构建方法,包括字符串、选项、多行文本、布尔值和git分支参数的配置,以及如何使用ActiveChoiceParameter实现动态获取参数选项。通过示例展示了传统方法和声明式pipeline的语法 文章目录 1. Jenkins的参数化构建1…

卓易通:鸿蒙Next系统的蜜糖还是毒药?

哈喽,我是老刘 最近很多人都在问鸿蒙next系统新上线的卓易通和出境易两款应用。 老刘分析了一下这个软件的一些细节,觉得还是蛮有意思的,我觉得可以从使用体验、底层原理和对鸿蒙生态的影响这三个角度来分析一下。 使用体验 性能 看到了一些测…

规则引擎drools(一)-技术要点

本文是规则引擎的第一篇,首先介绍规则引擎的技术要点,系列后续文章以本文为大纲,详细分析各个技术要点 1. 事实 事实是规则的依据,来源于业务,或是业务实体,或是多个业务实体的汇集; 2. 项目 描…

HarmonyOS学习 --- Mac电脑获取手机UDID

一,手机打开开发者选项 1,打开“设置 > 关于本机”,连续点击7次版本号,打开开发者选项。 2,打开“USB调试”。 二,配置环境变量 获取OpenHarmony SDK 安装路径 /Users/admin/Library/OpenHarmony/Sdk/10…

从 Router 到 Navigation:HarmonyOS 路由框架的全面升级与迁移指南

在本教程中,我们深入探讨了 Router 和 Navigation 在 HarmonyOS 中的用法差异及如何从 Router 切换到 Navigation 的方法。重点涵盖了页面跳转、转场动画、生命周期管理以及跨包路由的实现。 页面结构对比 Router 页面结构 每个页面需要使用 Entry 注解。 页面需要…

项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%

资料查找: 01 方案选择 使用单片机测量电阻有多种方法,以下是一些常见的方法及其原理: 串联分压法(ADC) 原理:根据串联电路的分压原理,通过测量已知电阻和待测电阻上的电压,计算出…

C++ ——— const 修饰的对象如何正确调用函数

目录 前言 const 修饰的对象调用函数 const 修饰的对象如何正确调用函数 前言 在上一章完善了日期类函数 C ——— 完善日期类-CSDN博客 接下来要讲解的 const 修饰对象就拿日期类举例 const 修饰的对象调用函数 代码演示: const Data d1(2024, 12, 15);Dat…

nacos 配置动态更新-笔记

本文属于b站图灵课堂springcloud笔记系列。讲得好还不要钱,值得推荐。 官方解释:nacos配置中心实时刷新的原理是什么? | Nacos 官网 专家官方解答 : Nacos配置中心实时刷新的原理基于以下几个核心步骤与机制,这些信息…

第100+33步 ChatGPT学习:时间序列EMD-ARIMA-LSTM模型

基于Python 3.9版本演示 一、写在前面 上一节,我们学了经验模态分解(Empirical Mode Decomposition,EMD)。 如同结尾所说,“那么,做这些分解有什么作用呢?有大佬基于这些分解出来的序列分别作…

Docker创建一个mongodb实例,并用springboot连接 mongodb进行读写文件

一、通过Docker 进行运行一个 mongodb实例 1、拉取镜像 docker pull mongo:5.0.5 2、创建 mongodb容器实例 docker run -d --name mongodb2 \-e MONGO_INITDB_ROOT_USERNAMEsalaryMongo \-e MONGO_INITDB_ROOT_PASSWORD123456 \-p 27017:27017 \mongo:5.0.5 3、进入容器&am…

12-2周 周总结

上周主要工作在英语六级,其它暂无进展 新的一周任务安排如下: ① 读完四篇重要文献论文 ② 搭建完云平台 ③ 整理小论文雏形 ④ 学习侧线系统代码 ⑤ 复习应用数理统计 前半部分 ⑥ springspringboot源码部分完结

云计算HCIP-OpenStack04

书接上回: 云计算HCIP-OpenStack03-CSDN博客 12.Nova计算管理 Nova作为OpenStack的核心服务,最重要的功能就是提供对于计算资源的管理。 计算资源的管理就包含了已封装的资源和未封装的资源。已封装的资源就包含了虚拟机、容器。未封装的资源就是物理机提…

【蓝桥杯选拔赛真题93】Scratch青蛙过河 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 Scratch青蛙过河 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 Scr…

Elasticsearch 7.x入门学习-Spring Data Elasticsearch框架

1 Spring Data框架 Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce 框架和云计算数据服务。 Spring Data 可以极大的简化 JPA的写法,…

OpenCV实验篇:识别图片颜色并绘制轮廓

第三篇:识别图片颜色并绘制轮廓 1. 实验原理 颜色识别的原理: 颜色在图像处理中通常使用 HSV 空间来表示。 HSV 空间是基于人类视觉系统的一种颜色模型,其中: H(Hue):色调,表示颜色…

MySql5.7安装、配置最新版

网上有很多的安装教程,但是有很多同学找不到历史安装包,而且官网变动比较大,我就直接给安装包了,下载 这个是安装包msi下载,可以参考下面的 MySQL详细安装教程,关于msi版和zip版详解,Windows …

ISP算法之坏点校正DPC(二):Verilog硬件实现与仿真

DPC的算法讲解和MATLAB仿真参考上一节: ISP算法之坏点校正DPC(一):MATLAB仿真验证-CSDN博客 本节讲解Verilog的硬件实现与仿真 行缓存设计 DPC算法是基于窗口邻域的像素级别算法,因此需要对实时到来的视频流进行行缓存,行缓存…

UE5制作倒计时功能

设置画布和文本 文本绑定 格式化时间 转到事件图表,计算时间,时间结束后面的事件可以按自己需求写 进入关卡蓝图,添加倒计时UI

在Spring Boot中的实现国际化(i18n)

1.什么是国际化(i18n)? 国际化(Internationalization,简称i18n)是指在软件应用中支持多种语言和文化的能力。通过国际化,应用可以根据用户的语言和地区设置,动态地显示不同的文本内…