一些细节
知识点一 折叠代码
主要作用 是让我们编程时 逻辑更加清晰
它是有 #region #endregion配对出现的
它的具体作用 是可以将中间包裹的代码折叠起来 避免代码太凌乱
本质是 编辑器提供给我们的 预处理指令
它只会在编辑时有用 发布了代码 或执行代码 它会被自动删除
1.变量
知识点一 如何申明变量
//变量 可以变化的容器 变量 就是用来存储各种不同类型数值的 一个容器
//不同的 变量类型 可以存储不同类型的值
//变量申明固定写法
// 变量类型 变量名 = 初始值;
//int i = 1;
// 变量类型 有14种变化
// 变量名 我们自定义 要按照一定规则
// 初始值 一定要和变量类型是统一
// = 和 ; 是固定的 不变的
//变量类型
// 一定要死记硬背 各种变量类型的关键字
// 一定要记忆 各种不同变量类型 所能存储的范围
// 一定要记住 各种不同变量类型 所能存储的类型
//1.有符号的整形变量 是能存储 一定范围 正负数包括0的变量类型
// sbyte -128~127
sbyte sb = 1;
//潜在知识点 通过+来进行拼接打印
Console.WriteLine("sbyte变量sb中存储的值是:" + sb);
// int -21亿~21亿多
int i = 2;
// short -32768~32767之间的数
short s = 3;
// long -9百万兆~9百万兆之间的数
long l = 4;
//2.无符号的整形变量 是能存储 一定范围 0和正数的变量类型
// byte 0~255
byte b = 1;
// uint 0~42亿多的一个范围
uint ui = 2;
// ushort 0~65535之间的一个数
ushort us = 3;
// ulong 0~18百万兆之间的数
ulong ul = 4;
//3.浮点数(小数)
//float 存储7/8位有效数字 根据编译器不同 有效数字也可能不一样 四舍五入
//有效数字 是从左到右从非0数开始算有效数字的
//之所以要在后面加f 是因为c#中 申明的小数 默认是double的类型 加f 是告诉系统 它是float类型
float f = 1.01234567890f;
Console.WriteLine(f);
//double 存储15~17位有效数字 抛弃的数字 会四舍五入
double d = 0.12345678901234567890123456789;
Console.WriteLine(d);
//decimal 存储27~28位的有效数字 不建议使用
decimal de = 0.123456789012345678901234567890m;
Console.WriteLine(de);
//4.特殊类型
//bool true false 表示真假的数据类型 真假类型
bool bo = true;
bool bo2 = false;
Console.WriteLine(bo + "_" + bo2);
//char 是用来存储单个字符的变量类型 字符类型
char c = '唐';
Console.WriteLine(c);
//string 是字符串类型 用来存储多个字符的 没有上限
string str = "的骄傲了肯定就发生123123sdafjkasdkfjaskldjfAKKSAJD";
Console.WriteLine(str);
int x = 1000;
Console.WriteLine(x);
//变量的使用和修改 不能不中生有 必须要先声明才能用
x = 900;
Console.WriteLine(x);
知识点二 为什么有那么多不同的变量类型
// 不同的变量 存储的范围和类型不一样 本质是占用的内存空间不同
// 选择不同的数据(变量)类型装在不同的数据
//姓名
//char string
string myName = "唐老狮";
//年龄
byte age = 18;
//身高cm
float height = 177.5f;
//体重kg
float weight = 68.5f;
//性别 true女 false男
bool sex = false;
//数字用int 小数用float 字符串用string 真假用bool
知识点三 多个相同类型变量 同时申明
int i2 = 1;
float f2 = 3.2f;
string str2 = "123";
bool bo3 = true;
//多个同类型变量申明
//固定写法
// 变量类型 变量名 = 初始值,变量名 = 初始值,变量名 = 初始值...;
int a1 = 1, b1 = 2, c1 = 3, d1 = 4;
Console.WriteLine(b1);
string s1 = "123", s2 = "234";
Console.WriteLine(s1 + s2);
知识点四 变量初始化相关
//变量申明时 可以不设置初始值 但是不建议这样写 这样不安全
int a2;
a2 = 1;
Console.WriteLine(a2);
2.变量本质
具体还可以引申出值变量和引用变量,类型的区别,这里着重于知识点不多加描述,具体请看本博客的头几篇
知识点一 变量的存储空间(内存中)
// 1byte = 8bit
// 1MB = 1024byte
// 1GB = 1024MB
// 1TB = 1024GB
// 通过sizeof方法 可以获取变量类型所占的内存空间(单位:字节)
//有符号
int sbyteSize = sizeof(sbyte);
Console.WriteLine("sbyte 所占的字节数为:" + sbyteSize);
int intSize = sizeof(int);
Console.WriteLine("int 所占的字节数为:" + intSize);
int shortSize = sizeof(short);
Console.WriteLine("short 所占的字节数为:" + shortSize);
int longSize = sizeof(long);
Console.WriteLine("long 所占的字节数为:" + longSize);
Console.WriteLine("******************************************");
//无符号
int byteSize = sizeof(byte);
Console.WriteLine("byte 所占的字节数为:" + byteSize);
int uintSize = sizeof(uint);
Console.WriteLine("uint 所占的字节数为:" + uintSize);
int ushortSize = sizeof(ushort);
Console.WriteLine("ushort 所占的字节数为:" + ushortSize);
int ulongSize = sizeof(ulong);
Console.WriteLine("ulong 所占的字节数为:" + ulongSize);
Console.WriteLine("******************************************");
//浮点数
int floatSize = sizeof(float);
Console.WriteLine("float 所占的字节数为:" + floatSize);
int doubleSize = sizeof(double);
Console.WriteLine("double 所占的字节数为:" + doubleSize);
int decimalSize = sizeof(decimal);
Console.WriteLine("decimal 所占的字节数为:" + decimalSize);
Console.WriteLine("******************************************");
//特殊类型
int boolSize = sizeof(bool);
Console.WriteLine("bool 所占的字节数为:" + boolSize);
int charSize = sizeof(char);
Console.WriteLine("char 所占的字节数为:" + charSize);
//sizeof是不能够得到string类型所占的内存大小的
//因为字符串长度是可变的 不定
//int stringSize = sizeof(string);
总结:
bool -> System.Boolean (布尔型,其值为 true 或者 false)
byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127)
char -> System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符)
short -> System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767)
ushort -> System.UInt16 (无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 65,535)
uint -> System.UInt32 (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 4,294,967,295)
int -> System.Int32 (整型,占 4 字节,表示 32 位整数,范围 -2,147,483,648 到 2,147,483,647)
float -> System.Single (单精度浮点型,占 4 个字节)
ulong -> System.UInt64 (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 大约 10 的 20 次方)
long -> System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方)
double -> System.Double (双精度浮点型,占8 个字节)
知识点二 变量的本质
变量的本质是2进制——>计算机中所有数据的本质都是二进制 是一堆0和1
为什么是2进制?
数据传递只能通过电信号,只有开和关两种状态。所以就用0和1来表示这两种状态
计算机中的存储单位最小为bit(位),他只能表示0和1两个数字
1bit 就是1个数 要不是0要不是1
为了方便数据表示
出现一个叫byte(字节)的单位,它是由8个bit组成的存储单位。
所以我们一般说一个字节为8位
1byte = 0000 0000
二进制和十进制的转换规则:
3.变量的命名规则
知识点一 必须遵守的规则
1.不能重名
2.不能以数字开头
3.不能使用程序关键字命名
4.不能有特殊符号(下划线除外)
建议的命名规则:变量名要有含义——>用英文(拼音)表示变量的作用
非常不建议的命名规则:用汉字命名
知识点二 常用命名规则
驼峰命名法——首字母小写,之后单词首字母大写(变量)
string myName = “唐老狮”;
string yourName = “你的名字”;
string yourMotherName = “”;
帕斯卡命名法——所有单词首字母都大写(函数、类)
string MyName = “dskafj”;
潜在知识点——C#中对大小写是敏感的 是区分的
比如上文的Myname和myName在编译器的眼中就是不同的变量
4.常量
知识点一 常量的申明
关键字 const
固定写法:
const 变量类型 变量名 = 初始值;
变量的申明为:
int i = 10;
而常量的申明:
const int i2 = 20;
知识点二 常量的特点
1.必须初始化
2.不能被修改
变量申明可以不初始化
string name;
之后可以来修改,如:
name = “123”;
name = “345”;
const string myName = “唐老狮”;
作用:申明一些常用不变的变量
eg:
PI 3.1415926
const float PI = 3.1415926f;
5.转义字符
知识点一 转义字符的使用
什么是转义字符?
它是字符串的一部分 用来表示一些特殊含义的字符
比如:在字符串中表现 单引号 引号 空行等等
固定写法:
//固定写法 \字符
//不同的 \和字符的组合 表示不同的含义
//常用转义字符
// 单引号 \'
string str = "\'哈哈哈\'";
Console.WriteLine(str);
// 双引号 \"
str = "\"哈哈哈\"";
Console.WriteLine(str);
// 换行 \n
str = "1231231\n23123123123";
Console.WriteLine(str);
// 斜杠 \\ 计算机文件路径 是要用到\符号的
str = "哈\\哈哈";
Console.WriteLine(str);
//不常用转义字符(了解)
// 制表符(空一个tab键) \t
str = "哈\t哈哈";
Console.WriteLine(str);
// 光标退格 \b
str = "123\b123";
Console.WriteLine(str);
// 空字符 \0
str = "1234\0123";
Console.WriteLine(str);
// 警报音 \a
str = "\a";
Console.WriteLine(str);
Console.WriteLine("1231231231\n123123213\a\t123123");
知识点二 取消转义字符
在字符串前加上@,编译器就不在会读取\,进而取消了转义字符:
eg:
string str2 = @“哈哈\哈哈”;
Console.WriteLine(str2);
Console.WriteLine(@"\n\");
6.类型转换之隐式转换
类型转换 就是不同变量类型之间的相互转换
隐式转换的基本规则——>1.不同类型之间自动转换2.大范围装小范围
知识点一 相同大类型之间的转换
//有符号 long——>int——>short——>sbyte
long l = 1;
int i = 1;
short s = 1;
sbyte sb = 1;
//隐式转换 int隐式转换成了long
//可以用大范围 装小范围的 类型 (隐式转换)
l = i;
//不能够用小范围的类型去装在大范围的类型
//i = l;
l = i;
l = s;
l = sb;
i = s;
s = sb;
//无符号 ulong——>uint——>ushort——>byte
ulong ul = 1;
uint ui = 1;
ushort us = 1;
byte b = 1;
ul = ui;
ul = us;
ul = b;
ui = us;
ui = b;
us = b;
//浮点数 decimal double——>float
decimal de = 1.1m;
double d = 1.1;
float f = 1.1f;
//decimal这个类型 没有办法用隐式转换的形式 去存储 double和float
//de = d;
//de = f;
//float 是可以隐式转换成 double
d = f;
//特殊类型 bool char string
// 他们之间 不存在隐式转换
bool bo = true;
char c = 'A';
string str = "123123";
注意,上文的——>指前者可以容纳后者,即后者可以被转换为前者
知识点二 不同大类型之间的转换
1.无符号和有符号之间
//无符号 不能装负数的
byte b2 = 1; //0~255
ushort us2 = 1;
uint ui2 = 1;
ulong ul2 = 1;
//有符号
sbyte sb2 = 1;
short s2 = 1;
int i2 = 1;
long l2 = 1;
//无符号装有符号
// 有符号的变量 是不能够 隐式转换成 无符号的
//b2 = sb2;
//us2 = sb2;
//ul2 = sb2;
//有符号装无符号
// 有符号变量 是可以 装 无符号变量的 前提是 范围一定要是涵盖的 存在隐式转换
//i2 = ui2;//因为 有符号的变量 可能会超过 这个无符号变量的范围
i2 = b2;// 因为 有符号的变量 不管是多少 都在 无符号变量的范围内
2.浮点数和整数(有、无符号)之间
//浮点数装整数 整形转为浮点数 是存在隐式转换的
float f2 = 1.1f;
double d2 = 1.1;
decimal de2 = 1.1m;
//浮点数 是可以装载任何类型的 整数的
f2 = l2;
f2 = i2;
f2 = s2;
f2 = sb2;
f2 = ul2;
f2 = ui2;
f2 = us2;
f2 = b2;
f2 = 10000000000000000000;
Console.WriteLine(f2);
//decimal 不能隐式存储 float和double
//但是它可以隐式的存储整形
de = l2;
de = ul2;
// double ——> float ——> 所有整形(无符号、有符号)
// decimal ——> 所有整形(无符号、有符号)
//整数装浮点数 整数是不能隐式存储 浮点数 因为 整数 不能存小数
//i2 = f2;
3.特殊类型和其它类型之间
//bool bool没有办法和其它类型 相互隐式转换
bool bo2 = true;
char c2 = 'A';
string str2 = "1231";
//bo2 = i2;
//bo2 = ui2;
//bo2 = f2;
//i2 = bo2;
//ui2 = bo2;
//f2 = bo2;
//bo2 = c2;
//c2 = bo2;
//bo2 = str2;
//str2 = bo2;
//char char 没有办法隐式的存储 其它类型的变量
//c2 = i2;
//c2 = f2;
//c2 = ui2;
//c2 = str2;
//char类型 可以隐式的转换成 整形和浮点型
//char隐式转换成 数值类型是
//对应的数字 其实是一个 ASCII码
// 计算机里面存储 2进制
// 字符 中文 英文 标点符号 在计算机中都是一个数字
// 一个字符 对应一个数字 ASCII码就是一种对应关系
i2 = c2;
Console.WriteLine(i2);
f2 = c2;
Console.WriteLine(f2);
ui2 = c2;
Console.WriteLine(ui2);
//str2 = c2;
//string 类型 无法和其它类型进行隐式转换
//i2 = str2;
//ui2 = str2;
//f2 = str2;
总结
总结 隐式转换 规则
高精度(大范围)装低精度(小范围)
double ——> float ——> 整数(无符号、有符号)——>char
decimal ——> 整数(无符号、有符号)——>char
string 和 bool 不参与隐式转换规则的
以及知识点一
7.类型转换之显式转换
显示转换:手动处理 强制转换
知识点一 括号强转
作用 一般情况下 将高精度的类型强制转换为低精度
语法: 变量类型 变量名 = (变量类型)变量;
注意: 精度问题 范围问题
//相同大类的整形
//有符号整形
sbyte sb = 1;
short s = 1;
int i = 40000;
long l = 1;
//括号强转 可能会出现范围问题 造成的异常
s = (short)i;
Console.WriteLine(s);
i = (int)l;
sb = (sbyte)s;
sb = (sbyte)i;
sb = (sbyte)l;
//无符号整形
byte b = 1;
uint ui = 1;
b = (byte)ui;
//浮点之间
float f = 1.1f;
double d = 1.1234567890123456789f;
f = (float)d;
Console.WriteLine(f);
//无符号和有符号
uint ui2 = 1;
int i2 = -1;
//在强壮时 一定要注意范围 不然得到的结果 可能有异常
ui2 = (uint)i2;
Console.WriteLine(ui2);
i2 = (int)ui2;
//浮点和整形 浮点数强转成整形时 会直接抛弃掉小数点后面的小数
i2 = (int)1.64f;
Console.WriteLine(i2);
//char和数值类型
i2 = 'A';
char c = (char)i2;
Console.WriteLine(c);
//bool和string 是不能够通过 括号强转的
//bool bo = true;
//int i3 = (bool)bo;
//string str = "123";
//i3 = (int)str;
知识点二 Parse法
作用 把字符串类型转换为对应的类型
语法: 变量类型.Parse(“字符串”)
注意: 字符串必须能够转换成对应类型 否则报错
//有符号
//string str2 = "123";
int i4 = int.Parse("123");
Console.WriteLine(i4);
// 我们填写字符串 必须是要能够转成对应类型的字符 如果不符合规则 会报错
//i4 = int.Parse("123.45");
//Console.WriteLine(i4);
// 值的范围 必须是能够被变量存储的值 否则报错
//short s3 = short.Parse("40000");
//Console.WriteLine(s3);
sbyte sb3 = sbyte.Parse("1");
Console.WriteLine(sb3);
//他们的意思是相同的
Console.WriteLine(sbyte.Parse("1"));
Console.WriteLine(long.Parse("123123"));
//无符号
Console.WriteLine(byte.Parse("1"));
Console.WriteLine(ushort.Parse("1"));
Console.WriteLine(ulong.Parse("1"));
Console.WriteLine(uint.Parse("1"));
//浮点数
float f3 = float.Parse("1.2323");
double d3 = double.Parse("1.2323");
//特殊类型
bool b5 = bool.Parse("true");
Console.WriteLine(b5);
char c2 = char.Parse("A");
Console.WriteLine(c2);
知识点三 Convert法
作用 更准确的将 各个类型之间进行相互转换
语法: Convert.To目标类型(变量或常量)
注意: 填写的变量或常量必须正确 否则出错
//转字符串 如果是把字符串转对应类型 那字符串一定要合法合规
int a = Convert.ToInt32("12");
Console.WriteLine(a);
//精度更准确
// 精度比括号强转好一点 会四舍五入
a = Convert.ToInt32(1.45845f);
Console.WriteLine(a);
//特殊类型转换
//把bool类型也可以转成 数值类型 true对应1 false对应0
a = Convert.ToInt32(true);
Console.WriteLine(a);
a = Convert.ToInt32(false);
Console.WriteLine(a);
a = Convert.ToInt32('A');
Console.WriteLine(a);
//每一个类型都存在对应的 Convert中的方法
sbyte sb5 = Convert.ToSByte("1");
short s5 = Convert.ToInt16("1");
int i5 = Convert.ToInt32("1");
long l5 = Convert.ToInt64("1");
byte b6 = Convert.ToByte("1");
ushort us5 = Convert.ToUInt16("1");
uint ui5 = Convert.ToUInt32("1");
ulong ul5 = Convert.ToUInt64("1");
float f5 = Convert.ToSingle("13.2");
double d5 = Convert.ToDouble("13.2");
decimal de5 = Convert.ToDecimal("13.2");
bool bo5 = Convert.ToBoolean("true");
char c5 = Convert.ToChar("A");
string str5 = Convert.ToString(123123);
知识点四 其它类型转string
作用:拼接打印
语法:变量.toString();
string str6 = 1.ToString();
str6 = true.ToString();
str6 = 'A'.ToString();
str6 = 1.2f.ToString();
int aa = 1;
str6 = aa.ToString();
bool bo6 = true;
str6 = bo6.ToString();
//当我们进行字符串拼接时 就自动会调用 tostring 转成string
Console.WriteLine("123123" + 1 + true);
str6 = "123123" + 1 + true + 1.23;
8.类型转换之显式转换
作用
将玩家输入的内容 存储 string类型的变量(容器)中
string str = Console.ReadLine();
Parse转字符串为 数值类型时 必须 要合法合规
int i = int.Parse(str);
通过对异常捕获的学习 可以避免当代码报错时 造成程序卡死的情况
基本语法
//必备部分
try
{
//希望进行异常捕获的代码块
//放到try中
//如果try中的代码 报错了 不会让程序卡死
}
catch
{
//如果出错了 会执行 catch中的代码 来捕获异常
//catch(Exception e) 具体报错跟踪 通过e得到 具体的错误信息
}
//可选部分
finally
{
//最后执行的代码 不管有没有出错 都会执行其中的代码
//目前 大家可以不用写
}
//注意:异常捕获代码基本结构中 不需要加; 在里面去写代码逻辑时 每一句代码才加;
实践代码
try
{
string str = Console.ReadLine();
int i = int.Parse(str);
Console.WriteLine(i);
//.......
}
catch
{
Console.WriteLine("请输入合法数字");
}
//finally
//{
// Console.WriteLine("执行完毕");
//}
9.算数运算符
算数运算符 是用于 数值类型变量计算的运算符
它的返回结果是数值
知识点一 赋值符号
关键知识点 :
先看右侧 再看左侧 把右侧的值赋值给左侧的变量
eg:
string myName = "唐老狮";
int myAge = 18;
float myHeight = 177.5f;
知识点二 算数运算符
加:+
减:-
乘:*
除:/
取余:%
知识点三 算数运算符的优先级
优先级 是指 在混合运算时的运算顺序
乘除取余 优先级高于 加减 先算乘除取余 后算加减
// 1 + 3 + 1 + 6
int a = 1 + 2 * 3 / 2 + 1 + 2 * 3;
Console.WriteLine(a);
a = 1 + 4 % 2 * 3 / 2 + 1;
Console.WriteLine(a);
//括号可以改变优先级 优先计算括号内内容
a = 1 + 4 % (2 * 3 / 2) + 1;
Console.WriteLine(a);
//多组括号 先算最里层括号 依次往外算
a = 1 + (4 % (2 * (3 / 2))) + 1;
Console.WriteLine(a);
知识点五 算数运算符的复合运算符
固定写法 运算符=
+= -= *= /= %=
复合运算符 是用于 自己=自己进行运算
int i3 = 1;
i3 = i3 + 2;
Console.WriteLine(i3);
i3 = 1;
i3 += 2;//i3 = i3 + 2;
Console.WriteLine(i3);
i3 = 2;
i3 += 2;//4
i3 -= 2;//2
i3 /= 2;//1
i3 *= 2;//2
i3 %= 2;//0
Console.WriteLine(i3);
int i4 = 10;
// i4 += 4
i4 += 20 * 2 / 10;
Console.WriteLine(i4);
//注意:复合运算符 只能进行一种运算 不能混合运算
//i4 */-= 2;
知识点六 算术运算符的自增减
int a2 = 1;
a2 = a2 + 1;
a2 = 1;
a2 += 1;
//自增运算符 让自己+1
a2 = 1;
a2++;//先用再加
Console.WriteLine(a2);
++a2;//先加再用
Console.WriteLine(a2);
a2 = 1;
Console.WriteLine(a2++);//1
//2
Console.WriteLine(++a2);//3
//自减运算符 让自己-1
a2 = 1;
a2--;//先用再减
--a2;//先减再用
a2 = 1;
Console.WriteLine(a2--);//1
//0
Console.WriteLine(--a2);//-1
10.字符串拼接
知识点一 字符串拼接方式1
之前的算数运算符 只是用来数值类型变量进行数学运算的
而 string 不存在算数运算符不能计算 但是可以通过+号来进行字符串拼接
string str = "123";
//用+号进行字符串拼接
str = str + "456";
Console.WriteLine(str);
str = str + 1;
Console.WriteLine(str);
// 复合运算符 +=
str = "123";
str += "1" + 4 + true;
Console.WriteLine(str);
str += 1 + 2 + 3 + 4;
Console.WriteLine(str);
str += "" + 1 + 2 + 3 + 4;
Console.WriteLine(str);
str = "";
str += 1 + 2 + "" + ( 3 + 4 );
Console.WriteLine(str);
str = "123";
str = str + (1 + 2 + 3);
Console.WriteLine(str);
//注意 : 用+号拼接 是用符号唯一方法 不能用-*/%...
知识点二 字符串拼接方式2
固定语法
string.Format(“待拼接的内容”, 内容1, 内容2,…);
拼接内容中的固定规则
想要被拼接的内容用占位符替代 {数字} 数字:0~n 依次往后
string str2 = string.Format("我是{0}, 我今年{1}岁, 我想要{2}", "唐老狮", 18, "天天学习,好好向上");
Console.WriteLine(str2);
str2 = string.Format("asdf{0},{1},sdfasdf{2}", 1, true, false);
Console.WriteLine(str2);
知识点三 控制台打印拼接
后面的 内容 比占位符多 不会报错
后面的 内容 比占位符少 会报错,因为不存在
Console.WriteLine(“A{0}B{1}C{2}”, 1, true, false,1,2);
Console.Write(“A{0}B{1}C{2}”, 1, true); (报错)
11.条件运算符
知识点一 条件运算符
用于比较两个变量或常量
是否大于 >
是否小于 <
是否等于 ==
是否不等于 !=
是否大于等于 >=
是否小于等于 <=
// 条件运算符 一定存在左右两边的内容
// 左边内容 条件运算符 右边内容
int a = 5;
int b = 10;
//条件运算符 不能直接这样使用
//纯比较不用结果 那么对于我们来说 没有任何的意义
//a > b;
// 比较的结果 返回的是 一个 bool 类型的值
// true和false 如果比较的条件满足 那就返回true 不满足 就返回false
// 先算右边 再赋值给左边
bool result = a > b;
Console.WriteLine(result);
result = a < b;
Console.WriteLine(result);
result = a >= b;
Console.WriteLine(result);
result = a <= b;
Console.WriteLine(result);
result = a == b;
Console.WriteLine(result);
result = a != b;
Console.WriteLine(result);
知识点二 各种应用写法
//变量和变量比较
a = 5;
b = 10;
result = a < b;// true
//变量和数值(常量)比较
result = a < 10;// true
result = b > 5;// true
//数值和数值比较
result = 5 > 3;//true
result = 5 == 3; // false
result = 5 != 3; // true;
//计算结果比较
//条件运算符的 优先级 低于算数运算符
// 8 > 6
// 先计算 再比较
result = a + 3 > a - 2 + 3;// true
result = 3 + 3 < 5 - 1;//false
//左边 条件运算符 右边
知识点三 不能进行范围比较
判断是否在某两个值之间
1 < a < 6(错误写法)
在C#都不能这样写
result = 1 < a < 6;
要判断 一个变量是否在两个数之间 要结合 逻辑运算符的知识点
知识点四 不同类型之间的比较
//不同数值类型之间 可以随意进行条件运算符比较
int i = 5;
float f = 1.2f;
double d = 12.4;
short s = 2;
byte by = 20;
uint ui = 222;
//只要是数值 就能够进行条件运算符比较 比较大于小于等于等等
result = i > f;
result = f < d;
result = i > by;
result = f > ui;
result = ui > d;
//特殊类型 char string bool 只能同类型进行 == 和 != 比较
string str = "123";
char c = 'A';
bool bo = true;
result = str == "234";//false
result = str == "123";//true
result = str != "123";//false
result = c == 'B';//false
//不仅可以和自己类型进行 == != 还可以和数值类型进行比较
//还可以和 字符类型进行大小比较
result = c > 123;
result = c > 'B';
result = bo == true;//true;
12.逻辑运算符
即对bool类型 进行逻辑运算
知识点一 逻辑与
符号 && 并且
规则 对两个bool值进行逻辑运算 有假则假 同真为真
bool result = true && false;
Console.WriteLine(result);
result = true && true;
Console.WriteLine(result);
result = false && true;
Console.WriteLine(result);
//bool相关的类型 bool变量 条件运算符
//逻辑运算符优先级 低于 条件运算符 算术运算
// true && true
result = 3 > 1 && 1 < 2;
Console.WriteLine(result);
int i = 3;
// 1 < i < 5;
// true && true
result = i > 1 && i < 5;
Console.WriteLine(result);
//多个逻辑与 组合运用
int i2 = 5;
// true && false && true && true
//在没有括号的情况下 从左到右 依次看即可
//有括号 先看括号内
result = i2 > 1 && i2 < 5 && i > 1 && i < 5;
Console.WriteLine(result);
知识点二 逻辑或
符号 || 或者
规则 对两个bool值进行逻辑运算 有真则真 同假为假
result = true || false;
Console.WriteLine(result);
result = true || true;
Console.WriteLine(result);
result = false || true;
Console.WriteLine(result);
result = false || false;
Console.WriteLine(result);
// false || true
result = 3 > 10 || 3 < 5;
Console.WriteLine(result);//true
int a = 5;
int b = 11;
// true || true || false
result = a > 1 || b < 20 || a > 5;
Console.WriteLine(result);
// ? && ?
// ? || ?
// ? 可以是写死的bool变量 或者 bool值
// 还可以是 条件运算符相关
知识点三 逻辑非
符号 !
规则 对一个bool值进行取反 真变假 假变真
result = !true;
Console.WriteLine(result);
result = !false;
Console.WriteLine(result);
result = !!true;
Console.WriteLine(result);
//逻辑非的 优先级 较高
result = !(3 > 2);
Console.WriteLine(result);
a = 5;
result = !(a > 5);
Console.WriteLine(result);
知识点四 混合使用优先级问题
规则 !(逻辑非)优先级最高 &&(逻辑与)优先级高于||(逻辑或)
逻辑运算符优先级 低于 算数运算符 条件运算符(逻辑非除外)
bool gameOver = false;
int hp = 100;
bool isDead = false;
bool isMustOver = true;
//false || false && true || true;
//false || false || true;
result = gameOver || hp < 0 && !isDead || isMustOver;
Console.WriteLine(result);
知识点五 逻辑运算符短路规则(重点)
int i3 = 1;
// || 有真则真
// 只要 逻辑与或者逻辑或 左边满足了条件
// i3 > 0 true
// 只要 满足条件 右边的内容 对于我们来说 已经不重要
//逻辑或 有真则真 那左边只要为真了 右边就不重要
result = i3 > 0 || ++i3 >= 1;
Console.WriteLine(i3);
Console.WriteLine(result);
// false && i3 ++ > 1;抛弃后面不去计算
//逻辑与 有假则假 那左边只要为假了 右边就不重要
result = i3 < 0 && i3++ > 1;
Console.WriteLine(i3);
Console.WriteLine(result);
13.位运算符(重点)
知识点一 位与 &
规则 连接两个数值进行位计算 将数值转为2进制
对位运算 有0则0
int a = 1;// 001
int b = 5;// 101
// 001
//& 101
// 001 = 1
int c = a & b;
Console.WriteLine(c);
a = 3;// 011
b = 19;// 10011
// 00011
//& 10011
// 00011
c = a & b;//3
Console.WriteLine(c);
//多个数值进行位运算 没有括号时 从左到右 依次计算
a = 1;// 001
b = 5;// 101
c = 19;//10011
// 00001
//& 00101
// 00001
//& 10011
// 00001
int d = a & b & c;
Console.WriteLine(d);
a = 1;//001
b = 2;//010
Console.WriteLine(a & b);
知识点二 位或 |
规则 连接两个数值进行位计算 将数值转为2进制
对位运算 有1则1
a = 1;//001
b = 3;//011
c = a | b;
// 001
//| 011
// 011
Console.WriteLine(c);
a = 5; // 101
b = 10;// 1010
c = 20;//10100
// 00101
//| 01010
// 01111
//| 10100
// 11111 => 1 + 2 + 4 + 8 + 16 =31
Console.WriteLine(a | b | c);
知识点三 异或 ^
规则 连接两个数值进行位计算 将数值转为2进制
对位运算 相同为0 不同为1
a = 1; //001
b = 5; //101
// 001
//^101
// 100
c = a ^ b;
Console.WriteLine(c);
a = 10; // 1010
b = 11; // 1011
c = 4; // 100
// 1010
//^ 1011
// 0001
//^ 0100
// 0101 = 5
Console.WriteLine(a ^ b ^ c);
知识点四 位取反 ~
规则 写在数值前面 将数值转为2进制
对位运算 0变1 1变0
a = 5;
// 0000 0000 0000 0000 0000 0000 0000 0101
// 1111 1111 1111 1111 1111 1111 1111 1010
// 反码补码知识
c = ~a;
Console.WriteLine(c);
知识点五 左移<< 和 右移>>
规则 让一个数的2进制数进行左移和右移
左移几位 右侧加几个0
a = 5; // 101
c = a << 5;
// 1位 1010
// 2位 10100
// 3位 101000
// 4位 1010000
// 5位 10100000 = 32 + 128 = 160
Console.WriteLine(c);
// 右移几位 右侧去掉几个数
a = 5; // 101
c = a >> 2;
// 1位 10
// 2位 1
Console.WriteLine(c);
14.三目运算符(重点)
可以让代码更优雅~~~
知识点一 基本语法
套路: 3个空位 2个符号!!!
固定语法:空位 ? 空位 : 空位;
关键信息:bool类型 ? bool类型为真返回内容 : bool类型为假返回内容;
三目运算符 会有返回值,这个返回值类型必须一致,并且必须使用!
知识点二 具体使用
string str = false ? "条件为真" : "条件为假";
Console.WriteLine(str);
int a = 5;
str = a < 1 ? "a大于1" : "a不满条件";
Console.WriteLine(str);
int i = a > 1 ? 123 : 234;
//第一个空位 始终是结果为bool类型的表达式 bool变量 条件表达式 逻辑运算符表达式
//第二三个空位 什么表达式都可以 只要保证他们的结果类型是一致的
bool b = a > 1 ? a > 6 : !false;
15.条件分支语句
有:if,switch
由于量过大而且比较偏常识,这里不做过多解释,请自行翻阅前面的文章
16.循环语句
有:while,do while,for
由于量过大而且比较偏常识,这里不做过