本文主要介绍C# 中的数据类型,包括值类型、数字类型、整数类型、浮点类型、布尔值、字符、字符串、引用类型,以及相关的示例代码

1、C# 数据类型

使用变量存储数据时,为了更充分利用内存空间,我们可以为变量指定不同的数据类型。并且不同类型可以执行不同的操作。如C# 变量文档中所说,C#中的变量必须是指定的数据类型:

例如:

int myNum = 5;               // 整数
float myFloatNum = 5.97f;    // 浮点数
char myLetter = 'C';         // 字符
bool myBool = true;       // 布尔值
string myText = "cjavapy";     // 字符串

数据类型分为两类:

  • 值类型:包括byteshortintlongfloatdoubleboolchar
  • 引用类型:例如,字符串,数组和类

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),不带小数。有效类型为byteshortintlong。应该使用哪种类型,取决于数值。

浮点类型表示带有小数部分的数字,包含一个或多个小数。有两种类型:floatdouble

尽管C#中有很多数字类型,但最常用于数字的是int(用于整数)和double(用于浮点数)。 

4、整数类型

1)字节类型(byte)

byte数据类型可以存储-128127之间的整数。当您确定该值将用于存储内存时,可以使用它代替int或其他整数类型来节省内存。在-128127之间:

例如:

byte myNum = 100;
Console.WriteLine(myNum);

2)短整型(short)

short数据类型可以存储-3276832767之间的整数:

例如:

short myNum = 5000;
Console.WriteLine(myNum);

3)整型(int)

int数据类型可以存储从-21474836482147483647的整数。当shortbyte不够大时使用。通常,在我们的教程中,当我们创建带有数字值的变量时,int数据类型是首选数据类型。

例如:

int myNum = 100000;
Console.WriteLine(myNum);

4)长整型(long)

long数据类型可以存储从-9223372036854775808922337203685477575807的整数。当int不足以存储该值时,将使用long。 请注意,长整型值应使用 "L" 结尾:

例如:

long myNum = 15000000000L;
Console.WriteLine(myNum);

5、浮点类型

每当需要带小数的数字(例如,9.993.14515)时,都应使用浮点类型。

1)float

float数据类型可以存储从3.4e-0383.4e+038的小数。 请注意,该值应该以 "f" 结尾:

例如

float myNum = 5.75f;
Console.WriteLine(myNum);

2)double

double数据类型可以存储从1.7e−3081.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关键字声明,并且只能采用值truefalse

例如:

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();
        }
    }
}

推荐文档