1、C# 数据类型
使用变量存储数据时,为了更充分利用内存空间,我们可以为变量指定不同的数据类型。并且不同类型可以执行不同的操作。如C# 变量文档中所说,C#中的变量必须是指定的数据类型:
例如:
int myNum = 5; // 整数 float myFloatNum = 5.97f; // 浮点数 char myLetter = 'C'; // 字符 bool myBool = true; // 布尔值 string myText = "cjavapy"; // 字符串
数据类型分为两类:
- 值类型:包括
byte
,short
,int
,long
,float
,double
,bool
和char
- 引用类型:例如,字符串,数组和类
2、值类型
值类型变量可以直接分配给一个值。它们是从类 System.ValueType
中派生的。
C#中值类型如下表:
型 | 描述 | 范围 | 默认值 |
bool | 布尔值 | True 或 False | False |
byte | 8 位无符号整数 | 0 到 255 | 0 |
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | '\0' |
decimal | 128 位精确的十进制值, 28-29 有效位数 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
double | 64 位双精度浮点型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
float | 32 位单精度浮点型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符号整数类型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
sbyte | 8 位有符号整数类型 | -128 到 127 | 0 |
short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 |
uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 |
ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 |
ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 |
3、数字类型
基本数字类型分为两组:
整数类型存储整数,可以是正数或负数(例如123或-456),不带小数。有效类型为byte
,short
,int
和long
。应该使用哪种类型,取决于数值。
浮点类型表示带有小数部分的数字,包含一个或多个小数。有两种类型:float
和double
。
尽管C#中有很多数字类型,但最常用于数字的是int
(用于整数)和double
(用于浮点数)。
4、整数类型
1)字节类型(byte)
byte
数据类型可以存储-128
到127
之间的整数。当您确定该值将用于存储内存时,可以使用它代替int
或其他整数类型来节省内存。在-128
和127
之间:
例如:
byte myNum = 100; Console.WriteLine(myNum);
2)短整型(short)
short
数据类型可以存储-32768
到32767
之间的整数:
例如:
short myNum = 5000; Console.WriteLine(myNum);
3)整型(int)
int数据类型可以存储从-2147483648
到2147483647
的整数。当short
和byte
不够大时使用。通常,在我们的教程中,当我们创建带有数字值的变量时,int
数据类型是首选数据类型。
例如:
int myNum = 100000; Console.WriteLine(myNum);
4)长整型(long)
long
数据类型可以存储从-9223372036854775808
到922337203685477575807
的整数。当int不足以存储该值时,将使用long
。 请注意,长整型值应使用 "L"
结尾:
例如:
long myNum = 15000000000L; Console.WriteLine(myNum);
5、浮点类型
每当需要带小数的数字(例如,9.99
或3.14515
)时,都应使用浮点类型。
1)float
float
数据类型可以存储从3.4e-038
到3.4e+038
的小数。 请注意,该值应该以 "f"
结尾:
例如:
float myNum = 5.75f; Console.WriteLine(myNum);
2)double
double
数据类型可以存储从1.7e−308
到1.7e + 308
的小数。 请注意,该值应该以 "d"
结尾:
例如:
double myNum = 19.99d; Console.WriteLine(myNum);
float
仅是六到七个十进制数字,而double
变量的精度约为15个数字。因此,对于大多数计算,使用double
更安全。
3)科学计数
浮点数也可以是带有 "e"
的科学数字,以表示10
的幂:
例如:
float f1 = 35e3f; double d1 = 12E4d; Console.WriteLine(f1); Console.WriteLine(d1);
6、布尔值
布尔数据类型使用bool
关键字声明,并且只能采用值true
或false
:
例如:
bool iscjavapy = true; bool isJava = false; Console.WriteLine(iscjavapy); // 输出 true Console.WriteLine(isJava); // 输出 false
布尔值主要用于条件判断的情况使用。
7、字符
char
数据类型用于存单个字符。 字符必须用单引号引起来,例如,‘A’
或 'c'
:
例如:
char myGrade = 'B'; Console.WriteLine(myGrade);
或者,可以使用ASCII
值来显示某些字符:
例如:
char a = (char)65, b = (char)6, c = (char)67;Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);
提示:所有ASCII值的列表都可以在ASCII码对照表中找到。
8、字符串
string
数据类型用于存字符序列(文本)。字符串值必须用双引号引起来:
例如:
string word = "Hello World"; Console.WriteLine(word);
string
类型在C#中被广泛使用和集成,有人将其称为“第九种特殊类型”。C#中的string
实际上是一种引用类型,因为它引用了一个对象。 string
对象具有用于对字符串执行某些操作的方法。
9、引用类型
引用数据类型称为引用类型,因为它们引用对象。
值类型和引用数据类型之间的主要区别是:
- 值类型在C#中是预定义的。 引用类型是由程序员创建的,而不是由C#定义的(
string
除外)。 - 引用类型可用于调用方法以执行某些操作,而值类型则不能。
- 值类型始终具有一个值,而引用类型可以为
null
。 - 值类型以小写字母开头,而引用类型以大写字母开头。
- 值类型的大小取决于数据类型,而引用类型具有相同的大小。
引用类型的示例包括字符串,数组,类,接口等。
10、类型默认值
下表列出了 C# 各个类型的默认值:
数据类型 | 默认值 |
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0 |
double | 0 |
char | 'u0000' |
String (or any object) | null |
bool | false |
例如,
using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { PrintValueTypeRange(); } static void PrintValueTypeRange() { Console.WriteLine("int 类型的最大值是:{0}", int.MaxValue, int.MinValue); Console.WriteLine("uint 类型的最大值是:{0}", uint.MaxValue, uint.MinValue); Console.WriteLine("byte 类型的最大值是:{0}", byte.MaxValue, byte.MinValue); Console.WriteLine("sbyte 类型的最大值是:{0}", sbyte.MaxValue, sbyte.MinValue); Console.WriteLine("short 类型的最大值是:{0}", short.MaxValue, short.MinValue); Console.WriteLine("ushort 类型的最大值是:{0}", ushort.MaxValue, ushort.MinValue); Console.WriteLine("long 类型的最大值是:{0}", long.MaxValue, long.MinValue); Console.WriteLine("ulong 类型的最大值是:{0}", ulong.MaxValue, ulong.MinValue); Console.WriteLine("float 类型的最大值是:{0}", float.MaxValue, float.MinValue); Console.WriteLine("double 类型的最大值是:{0}", double.MaxValue, double.MinValue); Console.WriteLine("decimal 类型的最大值是:{0}", decimal.MaxValue, decimal.MinValue); Console.WriteLine("int 类型的最小值是:{0}", int.MinValue); Console.WriteLine("uint 类型的最小值是:{0}", uint.MinValue); Console.WriteLine("byte 类型的最小值是:{0}", byte.MinValue); Console.WriteLine("sbyte 类型的最小值是:{0}", sbyte.MinValue); Console.WriteLine("short 类型的最小值是:{0}", short.MinValue); Console.WriteLine("ushort 类型的最小值是:{0}", ushort.MinValue); Console.WriteLine("long 类型的最小值是:{0}", long.MinValue); Console.WriteLine("ulong 类型的最小值是:{0}", ulong.MinValue); Console.WriteLine("float 类型的最小值是:{0}", float.MinValue); Console.WriteLine("double 类型的最小值是:{0}", double.MinValue); Console.WriteLine("decimal 类型的最小值是:{0}", decimal.MinValue); Console.ReadKey(); } } }