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

文章目录

一、变量

1、什么是变量?

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

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

比如

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

2、申明变量的固定写法

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

csharp 复制代码
int i = 1;

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

csharp 复制代码
int i;

i = 1;

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

csharp 复制代码
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
float 32 位单精度浮点数 ±1.5 × 10^−45 到 ±3.4 × 10^38(精度约7位有效数字)
double 64 位双精度浮点数 ±5.0 × 10^−324 到 ±1.7 × 10^308(精度约15--16位有效数字)
decimal 128 位高精度小数 ±1.0 × 10^−28 到 ±7.9 × 10^28(精度约28--29位有效数字)
bool 8 位布尔型 truefalse
char 16 位单一字符型 Unicode字符(0 到 65,535)

引用类型

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

值和引用类型的区别

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

无符号和有符号

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

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

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

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

例如

csharp 复制代码
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、变量命名规则

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

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

csharp 复制代码
int 整数 = 100;

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

7、float使用注意

C#小数默认是使用Double类型,所以直接赋值会报错,比如:

所以记得后面需要加上f才是float 类型

csharp 复制代码
float f = 10.1f;

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

csharp 复制代码
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 来定义常量。例如:

csharp 复制代码
const int MaxScore = 100;
const double Pi = 3.14159;
const string WelcomeMessage = "向宇的客栈";

在这些示例中:

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

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

3、常量的特性

  • 不可修改:常量的值一旦赋值,就不能再更改。如果你尝试修改常量的值,编译器会报错。例如:

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

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

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

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

    csharp 复制代码
    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

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

相关推荐
专科在努力!3 分钟前
STL中的deque(双端队列),存储结构与使用
开发语言·c++·stl
Cchengzu14 分钟前
百度23届秋招研发岗A卷
开发语言·数据库·c++
AI人H哥会Java19 分钟前
【JAVA】Java项目实战—Java EE项目:客户关系管理(CRM)系统
java·开发语言·spring boot·mysql
快乐飒男31 分钟前
C语言基础(结构体)
c语言·开发语言
勤劳的进取家35 分钟前
利用模拟退火算法求解旅行商问题
开发语言·python
小马超会养兔子40 分钟前
vue2实现答题组件
开发语言·前端·javascript·vue
tealcwu40 分钟前
【Unity基础】AudioSource 常用方法总结
unity·游戏引擎
威威猫的栗子1 小时前
用 Python Turtle 绘制经典汤姆猫:重温卡通角色的经典魅力
开发语言·python
星辰@Sea1 小时前
Python 实现对人的行为预测
开发语言·python
Amor风信子1 小时前
华为OD机试真题---机房布局
java·开发语言·数据结构·算法·华为od