上期回顾 - 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 }
VariableDefinition

 二、常量

  一)、常量类型

    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 }
ConstTest

  使用场景:

    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# 支持的其他一些重要的运算符,包括 sizeoftypeof 和 ? :

运算符描述实例
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# 中的判断语句

  (一)、判断语句

    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#基础,分享给大家。