1. 数字有哪些类型?
编程的时候我们老是跟数字打交道——从用户年龄到银河系里的星星数,或者银行账户里的分。可是不同的需求要用不同的数字类型:有时候只要存整数,有时候要很精确的小数,还有时候只需要“没有负号”的数字。
整数(int 还有别的)
整数就是没有小数部分的数字。
在C#里最常用的是int,不过还有别的选择,区别就是占用空间和能存的范围不一样。
- int —— 最常用的“主力”整数类型。能存很大(也很小)的数,占内存也不多。
比如,统计点赞数、年龄、一年有多少天,基本都会用int。 - long —— 要是数字特别大(比如几十亿、几万亿)就用它。
举个例子:存YouTube历史总播放量。 - short —— 比较省空间但用得少。适合一堆小数字都一样的场景(比如音频数据、颜色分量)。
- byte —— 能存的数更小,常见于图形、文件操作,内存节省很重要的时候。
小数(double、float、decimal)
有时候要处理带小数点的数字。比如气温、学生平均分、商品价格带分。
- double —— 存小数的“默认”类型。大多数计算都够用(比如:3.1415926535…)。
- float —— 更轻巧但精度低点,常见于图形编程或大数据量处理,内存节省优先。
- decimal —— 专门为金融、会计设计,精确到分,避免小数存储带来的“丢失”。比如存账户余额、商品价格、汇率。
特殊数字类型
C#里还有一些特殊数字类型,适合特殊场景:
- uint、ulong、ushort —— “无符号”类型,只能存正数,范围比“有符号”类型大一倍。
- sbyte —— 很小的有符号类型(能存-128到127的数,省空间)。
- BigInteger —— 要是你要搞超大数字,超出普通类型范围,比如加密、天文计算啥的。
2. 有符号和无符号数字
有符号类型能存正数也能存负数。适合数值可能“有正有负”的场景:比如气温、账户余额、海拔高度。
无符号类型——只能存零和正数。适合绝对不会有负数的场景——比如房间里的人数、文件里的字节数、时间。
举个例子:
- int(有符号):-10、0、50
- uint(无符号):0、10、1000
用无符号类型,变量能存的最大值直接翻倍(因为没有“负数那一半”)。只要你确定不会有负数,就可以用它们。
有符号整数类型
| 类型 | 大小 | 取值范围 | 用例 |
|---|---|---|---|
|
1字节 | -128到127 | -128, 0, 127 |
|
2字节 | -32 768到32 767 | -1000, 0, 32000 |
|
4字节 | -2 147 483 648到2 147 483 647 | -1000000, 0, 2000000 |
|
8字节 | -9 223 372 036 854 775 808 到9 223 372 036 854 775 807 |
-10_000_000_000, 1 |
无符号整数类型
| 类型 | 大小 | 取值范围 | 用例 |
|---|---|---|---|
|
1字节 | 0到255 | 0, 128, 255 |
|
2字节 | 0到65 535 | 1000, 65000 |
|
4字节 | 0到4 294 967 295 | 100, 4000000000 |
|
8字节 | 0到18 446 744 073 709 551 615 | 1, 18_000_000_000_000 |
小数类型
| 类型 | 大小 | 举例 | 说明 |
|---|---|---|---|
|
4字节 | 3.14f, -0.001f | 单精度(7位数字) |
|
8字节 | 3.1415, -1.7E+308 | 双精度(15-16位数字) |
|
16字节 | 0.1m, 12345.6789m | 高精度,适合金融 |
3. 数字的后缀
有时候你得明确告诉编译器你想用哪种类型的数字。这个就靠后缀来搞定:
- L 或 l —— 用于long类型(比如10000000000L)
- U 或 u —— 用于uint类型(比如123U)
- F 或 f —— 用于float类型(比如3.14f)
- D 或 d —— 用于double类型(其实一般不用,因为没后缀的小数默认就是double)
- M 或 m —— 用于decimal类型(比如99.99m——搞钱的时候特别重要!)
不写后缀的话,整数默认是int,小数默认是double。比如42就是int,3.14就是double。
为什么要这样?比如你给long类型变量赋个大数,不加L就会报错:
long bigNumber = 9000000000L; // 不加L会编译错误
搞钱的时候最好永远用decimal加m后缀:
decimal price = 999.99m;
4. 下划线分隔符 _
数字太长容易看花眼。C#里可以在数字里用下划线让它更清楚。
int population = 146_700_000;
long stars = 100_000_000_000L;
这完全合法:编译器会无视下划线,你一眼就能看出数字的位数。注意别把下划线放在开头、结尾、小数点后或后缀前。
5. 字符类型 char
有时候你不是要数字,而是单个字符:字母、数字、符号,甚至空格。专门有个类型——char。
啥是char?
就是能存一个字符的变量:
- 拉丁字母或汉字('A','字')
- 数字('5')
- 特殊符号('#','%','@')
- 控制字符('\\n'——换行)
注意点:
- char类型的值要用单引号写:char letter = 'B';
- 其实char内部存的是字符的数字编码(Unicode),所以char能跟int互转,还能做简单的数学运算:
char a = 'A';
char b = (char)(a + 1); // 'B'
int code = a; // 65 —— 'A'的编码
还能用特殊字符,比如:char tab = '\\t'; // 制表符
为啥要用char?
处理文本时按字符操作(比如检查字符串首字母、找标点、一个个读密码)。
GO TO FULL VERSION