上期回顾 - https://www.cnblogs.com/liu-jinxin/p/10818256.html
一、变量
一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。范围内的值可以存储在内存中,可以对变量进行一系列操作
(一)、变量的分类
C# 中提供的基本的值类型大致可以分为以下几类:
类型 | 举例 |
整数类型 | sbyte、byte、short、ushort、int、uint、long、ulong 和 char |
浮点型 | float 和 double |
十进制类型 | decimal |
布尔类型 | true 或 false 值,指定的值 |
空类型 | 可为空值的数据类型 |
取值的范围:(一些变量名称前面的“u”是unsigned的简称,表示该类型存储的是大于0的整数)
类型 | 别名 | 范围 |
sbyte | System.SByte | 在-128~127之间的整数 |
byte | System.Byte | 在0~255之间的整数 |
short | System.Int16 | 在-32768~32767之间的整数 |
ushort | System.UInt16 | 在0~65535之间的整数 |
int | System.Int32 | 在-2147483648~2147483647之间的整数 |
uint | System.UInt32 | 在0~4294967295之间的整数 |
long | System.Int64 | 在-9223372036854775808~9223372036854775807之间的整数 |
ulong | System.UInt64 | 在0~18446744073709551615之间的整数 |
char | System.Char | 一个Unicode字符,存储0~65535之间的整数 |
bool | System.Boolean | 布尔值:true或false |
float | System.Single | 32位浮点值 7位小树,范围在+-1.5x10-45 ~~~~ +-3.4x10+38 |
decimal | System.Decimal | 有符号128位数据,有28到29位有效位,范围大概在+-1.0x10-28 ~~ +-7.9x10+28 |
double | System.Double | 64位浮点值,有15到16位的小树,范围在+-5.0X10-324 ~1.7x10+308 |
float / decimal / double之间的区别:
1、float 单精度浮点 32bit,
double 双精度浮点64bit,
decimal是高精度 128bit,浮点型。
2、float double 是 基本类型(primitive type),decimal不是。
3、decimal的有效位数很大,达到了28位,但是表示的数据范围却比float和double类型小。
4、常数写法:
float f = 12.3F; (带F)
double x=12.3; (不带就是double)
decimal d = 12.30M; (带M)
C# 允许定义其他值类型的变量,比如 enum,也允许定义引用类型变量,比如 class。这些我们将在以后的章节中进行讨论。在本章节中,我们只研究基本变量类型
(二)、变量的定义
语法:<data_type> <variable_list>;
代码示例:
1 namespace VariableDefinition 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 /* 声明 */ 8 int a , b ; 9 string c ; 10 char d; 11 12 /* 实际初始化 */ 13 a = 10; 14 b = 20; 15 c = "abc"; 16 d = 'b'; 17 Console.WriteLine("a = {0}, b = {1}, c = {2}, d = {3}", a, b, c,d); 18 Console.ReadLine(); 19 } 20 } 21 }
二、常量
(一)、常量类型
1、整数常量
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。整数常量也可以有后缀,可以是 U 和 L 的组合,其中,U 和 L 分别表示 unsigned 和 long。后缀可以是大写或者小写,多个后缀以任意顺序进行组合。
2、浮点常量
一个浮点常量是由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。使用小数形式表示时,必须包含小数点、指数或同时包含两者。使用指数形式表示时,必须包含整数部分、小数部分或同时包含两者。有符号的指数是用 e 或 E 表示的。
3、字符串常量
字符串常量是括在双引号 "" 里,或者是括在 @"" 里。字符串常量包含的字符与字符常量相似,可以是:普通字符、转义序列和通用字符。使用字符串常量时,可以把一个很长的行拆成多个行,可以使用空格分隔各个部分。
以下是各种类型的示例:
(二)、常量的定义
语法:const <data_type> <constant_name> = value;
代码示例:
1 using System; 2 3 public class ConstTest 4 { 5 class SampleClass 6 { 7 public int x; 8 public int y; 9 public const int c1 = 5; 10 public const int c2 = c1 + 5; 11 12 public SampleClass(int p1, int p2) 13 { 14 x = p1; 15 y = p2; 16 } 17 } 18 19 static void Main() 20 { 21 SampleClass mC = new SampleClass(11, 22); 22 Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y); 23 Console.WriteLine("c1 = {0}, c2 = {1}", 24 SampleClass.c1, SampleClass.c2); 25 } 26 }
使用场景:
1、用于在程序中一旦设定就不被修改的值,例如,圆周率的值。
2、用于在程序中经常被引用的值,例如,某个错误消息在程序中被多处引用,就可以定义为常量。
3、用于在程序中具有特定意义的值,例如,使用 1 表示登陆状态 使用0表示离线状态。
三、运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,分类如下:
算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符及其他运算符。
(一)、算术运算符
下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
-- | 自减运算符,整数值减少 1 | A-- 将得到 9 |
(二)、关系运算符
下表显示了 C# 支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 不为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 不为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
(三)、逻辑运算符
下表显示了 C# 支持的所有逻辑运算符。假设变量 A 为布尔值 true,变量 B 为布尔值 false,则:
运算符 | 描述 | 实例 |
---|---|---|
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A || B) 为真。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(A && B) 为真。 |
(四)、位运算符
下表列出了 C# 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:
运算符 | 描述 | 实例 |
---|---|---|
& | 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 | (A & B) 将得到 12,即为 0000 1100 |
| | 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 | (A | B) 将得到 61,即为 0011 1101 |
^ | 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 | (A ^ B) 将得到 49,即为 0011 0001 |
~ | 按位取反运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0,包括符号位。 | (~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。 |
<< | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 | A << 2 将得到 240,即为 1111 0000 |
>> | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 | A >> 2 将得到 15,即为 0000 1111 |
(五)、赋值运算符
下表列出了 C# 支持的赋值运算符:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
<<= | 左移且赋值运算符 | C <<= 2 等同于 C = C << 2 |
>>= | 右移且赋值运算符 | C >>= 2 等同于 C = C >> 2 |
&= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 |
^= | 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 |
|= | 按位或且赋值运算符 | C |= 2 等同于 C = C | 2 |
(六)、其他运算符
下表列出了 C# 支持的其他一些重要的运算符,包括 sizeof、typeof 和 ? :。
运算符 | 描述 | 实例 |
---|---|---|
sizeof() | 返回数据类型的大小。 | sizeof(int),将返回 4. |
typeof() | 返回 class 的类型。 | typeof(StreamReader); |
& | 返回变量的地址。 | &a; 将得到变量的实际地址。 |
* | 变量的指针。 | *a; 将指向一个变量。 |
? : | 条件表达式 | 如果条件为真 ? 则为 X : 否则为 Y |
is | 判断对象是否为某一类型。 | If( Ford is Car) // 检查 Ford 是否是 Car 类的一个对象。 |
as | 强制转换,即使转换失败也不会抛出异常。 | Object obj = new StringReader("Hello"); StringReader r = obj as StringReader; |
(七)、优先级
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
四、判断
判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。
下面是大多数编程语言中典型的判断结构的一般形式:
(一)、判断语句
C# 提供了以下类型的判断语句。点击链接查看每个语句的细节。
语句 | 描述 |
---|---|
if 语句 | 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 |
if...else 语句 | 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。 |
嵌套 if 语句 | 您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 |
switch 语句 | 一个 switch 语句允许测试一个变量等于多个值时的情况。 |
嵌套 switch 语句 | 您可以在一个 switch 语句内使用另一个 switch 语句。 |
(二)、三目表达式
实例如下:
m = a > b ? a : b;
表示先判断a是否大于b,若a>b,则将a的值赋给m,若不符合a>b,则将b的值赋给m
五、循环
有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了允许更为复杂的执行路径的多种控制结构。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:
(一)、循环的类型
C# 提供了以下几种循环类型。点击链接查看每个类型的细节。
循环类型 | 描述 |
---|---|
while 循环 | 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。 |
for/foreach 循环 | 多次执行一个语句序列,简化管理循环变量的代码。 |
do...while 循环 | 除了它是在循环主体结尾测试条件外,其他与 while 语句类似。至少会执行一次。 |
嵌套循环 | 您可以在 while、for 或 do..while 循环内使用一个或多个循环。 |
(二)、控制循环的语句
循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。
C# 提供了下列的控制语句。点击链接查看每个语句的细节。
控制语句 | 描述 |
---|---|
break 语句 | 终止 loop 或 switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。 |
continue 语句 | 引起循环跳过主体的剩余部分,立即重新开始测试条件。 |
(三)、无限循环
1 using System; 2 namespace Loops 3 { 4 class Program 5 { 6 static void Main(string[] args) 7 { 8 for (; ; ) 9 { 10 Console.WriteLine("Hey! I am Trapped"); 11 } 12 } 13 } 14 }
如果条件永远不为假,则循环将变成无限循环。for 循环在传统意义上可用于实现无限循环。由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。
六:下期预告 - https://www.cnblogs.com/liu-jinxin/p/10826971.html
-> 方法
-> 可空类型
-> 数组
-> 字符串
-> 结构体
-> 枚举
参考文献:
1、https://www.runoob.com/csharp/csharp-variables.html
2、http://www.cnblogs.com/sunzhenyong/p/3809433.html
3、https://www.cnblogs.com/niyl/p/10146114.html
根据w3school自我温习一下c#基础,分享给大家。