共计 3276 个字符,预计需要花费 9 分钟才能阅读完成。
2.1 C# 中的根本数据类型
C# 中变量的数据类型分为:值类型、援用类型、指针类型。
C# 中值类型分为以下:
整型:
byte、int、short、long
byte 的范畴 0-255 1 字节
short 的范畴 -32768 —32767 2 字节
int 的范畴 -2147483648 — 2147483647 4 字节
long 的范畴 -910^18 — 910^18 8 字节
浮点型:
float -3.4x 10^38 ~ + 3.4 x 10^38 4 个字节单精度 有精度损耗 0.0F 准确到小数点后大概 7 位 double (+/-)5.0 x 10-324 ~ (+/-)1.7 x 10308 8 个字节双精度 有精度损耗 0.0D 准确到小数点后大概 15~16 位
十进制:
decimal(准确) ±1.0 × 10^-28 到 ±7.9 × 10^28 16 个字节 无损耗 0.0M 有效位数 28 位
布尔类型:
bool(true、false)
字符类型:
char 只能蕴含一个字符,‘\0’示意空字符
可空类型(只能是值类型可空 如:int?示意可空 int):
Nullable<T> 根底值类型失常范畴内的值,再加上一个 null 值。
枚举(值类型):
enum 一组命名整型常量,用 enum 关键字申明的
构造体:
struct 值类型数据结构
// 整型 | |
int a = 1; | |
long longNum = 12345; | |
byte b1 = 256; // 超范围, 谬误 | |
| |
// 浮点类型 | |
// 不确定类型的时候能够应用 var(自匹配)申明变量,他能够依据值来推导变量的类型 | |
var money = 2.3; // 当有小数的时候默认是 double 类型 | |
float f1 = 3.45f;// 如果想要申明单精度类型,须要在小数前面加 f 或者 F | |
double d2 = 23.56D;// double 不带后缀也可带:D 或 d | |
decimal de1 = 2.3m;// decimal 带后缀 M m | |
| |
Console.WriteLine(sizeof(decimal)); // 查看 decimal 类型调配的内存 | |
| |
// 可空类型:留神,C# 中的可空类型只能是值类型 | |
// Nullable<T> int? float? double? Nullable<int> | |
// int c = null;// 不可运行 援用类型 null | |
int? c = null;// 能够运行 | |
| |
// bool 类型,值为 true 或者 false | |
bool bl = false; | |
| |
// char 类型 | |
char a = 'a'; |
2.2 字符串类型
字符串类型: 由一个或多个字符形成的一组字符,string 类型是 System.String 类的别名。它是从 object 类型派生的。string 类型的值能够通过两种模式进行调配:引号和 @引号。
留神:C# 中字符串类型是援用类型。
如:string ss=”liming”或 ss=@“liming”
@将转义字符(\)当作一般字符看待
@字符串中能够任意换行,换行符及缩进空格都计算在字符串长度之内。
string ss = "\r\nliming"; | |
ss = @"\r\nliming2"; | |
Console.WriteLine(ss); | |
| |
// ss="" 或 string.empty 会别离空间 长度 0 null 不会调配空间 | |
string ss2 = "", ss3 = string.Empty, ss4 = null; | |
Console.ReadLine(); |
转义字符:
// 本义符指的就是一个 ''+ 一个非凡的字符,组成了一个具备非凡意义的字符。\n: 示意换行 | |
": 示意一个英文半角的双引号 | |
\t: 示意一个 tab 键的空格 | |
\b: 示意一个退格键,放到字符串的两边没有成果。\r\n:windows 操作系统不意识 \n, 只意识 \r\n | |
\: 示意一个 \ |
2.3 算数运算符
算术运算符:+ – * / %(取余数 取模)
算术表达式:由算术运算符连接起来的式子,如:1+1 a-b(变量 ab 后面已申明并赋初值)
演示: 某学生三门课问题为,语文:90 数学:80 英语:67,编程求总分和平均分.
优先级: 先乘除、后加减、有括号先算括号里的、雷同级别的从左至右运算 int a=((1+5)+3)*2
小括号能够无限度的套用,但肯定要成对呈现。
留神:这边的 + – 也能够示意正负运算符
2.4 赋值运算符
++ 自加 1 有前加和后加 | |
-- 自减 1 有前减和后减 | |
| |
+= -= *= /= %= | |
| |
对于像 ++ -- 这样的只须要一个操作数就能进行运算的运算符,咱们叫做一元运算符 | |
对于 +-*/%= 都须要两个操作数能力进行运算的这些运算符,咱们叫做二元运算符 | |
| |
PS:一元运算符 ++/-- 比二元的 +- 优先级高 |
2.5 关系运算符
> < | |
== != | |
>= <= |
int a = 10; | |
int b =10; | |
| |
Console.WriteLine(a!=b); |
2.6 逻辑运算符 &&(逻辑与) ||(逻辑或) !(逻辑非)
- 表达式 1 && 表达式 2
表达式 1 | 表达式 2 | 表达式 1 && 表达式 2 |
---|---|---|
True | True | True |
False | True | False |
True | False | False |
False | False | false |
- 表达式 1 || 表达式 2
表达式 1 | 表达式 2 | 表达式 1 ll 表达式 2 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | false |
- ! 表达式
表达式 | ! 表达式 |
---|---|
True | False |
False | true |
逻辑运算符的短路成果
C# 中的逻辑运算符具备短路成果。这意味着当表达式中的一个操作数曾经确定了表达式的值时,就不再计算表达式的其余局部。
例如,思考以下代码:
int x = 10; | |
int y = 5; | |
if (x > 5 && y < 10) | |
{Console.WriteLine("哈哈哈哈哈"); | |
} |
在这个代码中,如果 x 不大于 5,则表达式 (x > 5 && y < 10) 的值将是 false,无需计算 y < 10。这是因为在逻辑与运算符中,如果左操作数为 false,则整个表达式的后果将为 false。这个过程被称为“短路”,因为表达式在遇到第一个 false 值时就“短路”了。 同样地,对于逻辑或运算符,如果左操作数为 true,则整个表达式的后果将是 true,无需计算右操作数。这种状况下也会产生短路。 短路成果能够在编写 C# 代码时进步性能,因为不用计算表达式的所有局部,从而节俭了计算资源。
2.7 位运算符
^、& 和 | 运算符是位运算符,用于对二进制数进行按位操作。这些运算符能够对每个二进制位进行逻辑运算,执行异或、按位与和按位或等操作。
- ^ 运算符:异或运算符。当两个二进制位不同时,后果为 1,否则后果为 0。例如,二进制数 1010 ^ 0110 的后果为 1100。
- & 运算符:按位与运算符。当两个二进制位都为 1 时,后果为 1,否则后果为 0。例如,二进制数 1010 & 0110 的后果为 0010。
- | 运算符:按位或运算符。当两个二进制位至多有一个为 1 时,后果为 1,否则后果为 0。例如,二进制数 1010 | 0110 的后果为 1110。
~ 运算符是按位取反运算符,用于将一个二进制数的每个位取反,行将 0 变为 1,将 1 变为 0。它的作用相当于将整数的二进制位进行取反操作。
int a = 10; // 二进制数为 0000 1010 int b = ~a; // b 的值为 -11(二进制数为 1111 0101)
这些运算符通常用于解决底层的位操作,例如解决网络协议、图形处理、加密和解密等。在 C# 中,能够应用它们来设置、革除或测试二进制位。例如,能够应用 & 运算符来测试一个字节中的某个位是否为 1,应用 | 运算符来将某个位设置为 1,应用 ^ 运算符来切换某个位的值等。
2.8 左移和右移运算符
左移和右移运算符是位运算符,也称为移位运算符。它们能够对二进制数进行按位移位操作。上面别离介绍一下这两个运算符的作用:
<<
运算符:左移运算符。将一个二进制数向左挪动指定的位数,相当于在其开端增加指定数量的零。例如,二进制数 1010 左移 2 位的后果为 101000。>>
运算符:右移运算符。将一个二进制数向右挪动指定的位数,相当于将其开端的指定数量的位数删除。例如,二进制数 1010 右移 2 位的后果为 10。int a = 10; // 二进制数为 1010 int b = a << 2; // b 的值为 40,二进制数为 101000 int c = a >> 1; // c 的值为 5,二进制数为 101