在C#中,数值类型用于表示整数和浮点数。以下是C#支持的数值类型及其示例。
整型(Integral Types)
byte
8位无符号整数,取值范围为0到255。
sbyte
8位有符号整数,取值范围为-128到127。
short
16位有符号整数,取值范围为-32768到32767。
ushort
16位无符号整数,取值范围为0到65535。
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。
示例
int x = 127; // 声明一个int类型变量x,并赋值为127 long y = 0x7F; // 声明一个long类型变量y,并赋值为十六进制7F int million = 1_000_000; // 使用下划线提高可读性 var b = 0b1010_1001_1011; // 二进制字面量
浮点型(Floating-Point Types)
float
单精度浮点数,通常用于科学计算。
double
双精度浮点数,C#中默认的浮点数类型。
decimal
128位十进制浮点数,用于需要高精度的金融计算。
示例
double d = 1.5; // 声明一个double类型变量d,并赋值为1.5 double million2 = 1E06; // 使用E表示科学记数法 float f = 43.5F; // 声明一个float类型变量,并使用F后缀 decimal d2 = -1.23M; // 声明一个decimal类型变量,并使用M后缀
数值字面量类型推断
C#允许根据赋值的值推断变量的类型。
var inferredDouble = 1.0; // 推断为double类型 var inferredInt = 1; // 推断为int类型
算数运算符
C#提供了基本的算数运算符,包括加(+
)、减(-
)、乘(*
)、除(/
)和模(%
)。
示例
Console.WriteLine(2 + 1); // 输出3 Console.WriteLine(2 - 1); // 输出1 Console.WriteLine(2 * 1); // 输出2 Console.WriteLine(2 / 1); // 输出2 Console.WriteLine(10 % 3); // 输出1
自增和自减运算符
++
(自增)和--
(自减)运算符用于递增或递减变量的值。
示例
int x1 = 1; Console.WriteLine(x1++); // 输出1,然后x1变为2 int y1 = 1; Console.WriteLine(++y1); // 输出2,y1先递增再返回
整数溢出
C#中的整数运算可能会发生溢出,这取决于是否使用checked
或unchecked
上下文。
示例
int num = int.MinValue; Console.WriteLine(int.MaxValue == --num); // 输出True,因为溢出 unchecked { int num3 = int.MinValue; Console.WriteLine(int.MaxValue == --num3); // 输出True,不抛出异常 } // 使用checked上下文将抛出OverflowException异常 // checked // { // int num2 = int.MinValue; // Console.WriteLine(int.MaxValue == --num2); // 抛出异常 // }
位运算符
C#还支持位运算符,包括按位取反(~
)、按位与(&
)、按位或(|
)、按位异或(^
)、按位左移(<<
)和按位右移(>>
)。
隐式类型转换和显式类型转换
当进行算术运算时,较小的数据类型可能会隐式转换为较大的数据类型,以避免数据丢失。
示例
short x3 = 1, y3 = 1; int z3 = x3 + y3; // x3和y3隐式转换为int short z31 = (short)(x3 + y3); // 显式转换为short
常量
C#允许定义常量,使用const
关键字。
示例
Console.WriteLine(Double.MaxValue); // 输出double类型的最大值 Console.WriteLine(Double.MinValue); // 输出double类型的最小值 Console.WriteLine(Double.NaN); // 输出Not a Number的特殊值 Console.WriteLine(Double.NaN == Double.NaN); // 输出False,因为NaN不等于任何值 Console.WriteLine(Double.IsNaN(0.0 / 0.0)); // 输出True,检测NaN Console.WriteLine(object.Equals(Double.NaN, 0.0 / 0.0)); // 输出True,使用Equals方法比较
以上是对C#数值类型的介绍和示例。数值类型是编程中的基础,了解它们的特性和用法对于编写高效、可靠的代码至关重要。