> 技术文档 > Unity之C#学习_c# unity

Unity之C#学习_c# unity


注释

分类:

1.两杠注释

2.星号注释

3.三杠注释 可用于给一些自定义的类型(如枚举)之前,可形成注释,便于理解

快捷键:

ctrl+K+C 注释

ctrl+K+U 取消注释

折叠代码

            #region 如何折叠代码
            //输入#region后点击Tab键会自动生成 #endregion 
            //本质是编辑器提供的预处理指令,在代码发布或执行都会被自动删除
            #endregion

变量

变量 是存储 不同类型 数值 的 一个容器,不同的变量类型可以存储不同类型的值

变量类型 --关键字 --范围 --类型

如何声明变量

            // 变量类型 变量名 = 数值;
                 int             i        =    1;
            //14种变量类型 变量名自己定义但要按照规则 初始值和变量类型时统一的

//1.有符号的整形变量 --存储一定范围 正负数包括0的变量类型 //sbyte -128~127 sbyte sb = 1; Console.WriteLine(\"sbyte变量sb中存储的值是\" + sb); //用+号来拼接字符串和变量的打印 // int -21亿~21亿多 int a = 1; // short -32768~32768之间的整数 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~65536之间的一个数 ushort us = 3; // ulong 0~18百万兆之间的数 ulong ul = 4; //3.浮点数 // float --存储7/8位有效数字,根据操作系统或者编译器不同 保留的有效数字可能不同,四舍五入 float f = 1.223442123f; //c#中声明的小数默认是double类型 所以float类型小数后加f或F float f1 = 30; // double --存储15~17位有效数字 四舍五入 有效数字指的是从左到右的非0数开始计算的 double d = 0.232423423435; // decimal --存储27~28位有效数字 一般不建议使用 decimal de = 0.1342351353462462465624235266m; //4.特殊类型 //bool 真假类型 --true false bool bo = true; bool bo2 = false; Console.WriteLine(bo +\"\"+ bo2); //char 字符类型 --存储单个字符的变量类型 char c = \'a\'; Console.WriteLine(c); //string 字符串类型 --存储多个字符 没有上限 string str = \"aaabbbccc\"; Console.WriteLine(str);

注意:c#中声明的小数默认是double类型 所以float类型小数后加f或F

为什么有这么多不同的变量类型

不同的变量存储的范围的类型不同,本质上是占用的内存空间不同

整数用int 小数用float 字符串用string 真假用bool

变量的存储空间

变量的存储空间 //1byte = 8bit //1KB = 1024byte //1MB = 1024KB //1GB = 1024MB //1TB = 1024GB //通过sizeof方法 可以获取变量类型所占的内存空间(单位:字节) //有符号 //sbyte (-128~127) //int (-21亿多~21亿多) //short (-3万多~3万多) //long (-9百万兆多~9百万兆多) int sbyteSize = sizeof(sbyte); Console.WriteLine(\"sbyte 所占的字节数位\" + sbyteSize); //sbyte 所占的字节数位1 int intSize = sizeof(int); Console.WriteLine(\"int 所占的字节数位\" + intSize); //int 所占的字节数位4 int shortSize = sizeof(short); Console.WriteLine(\"short 所占的字节数位\" + shortSize); //short 所占的字节数位2 int longSize = sizeof(long); Console.WriteLine(\"long 所占的字节数位\" + longSize); //long 所占的字节数位8 Console.WriteLine(\"*******************************************\"); //无符号 //byte (0~255) //uint (0~21亿多) //ushort (0~6万多) //ulong (0~18百万兆多) 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(\"*******************************************\"); //浮点数 //float (7~8位有效数字) //double (15~17位有效数字) //decimal (27~28位有效数字) int floatSize = sizeof(float); Console.WriteLine(\"float 所占的字节数位\" + floatSize); //float 所占的字节数位4 int doubleSize = sizeof(double); Console.WriteLine(\"double 所占的字节数位\" + doubleSize); //double 所占的字节数位8 int decimalSize = sizeof(decimal); Console.WriteLine(\"decimal 所占的字节数位\" + decimalSize); //decimal 所占的字节数位16 Console.WriteLine(\"*******************************************\"); //特殊类 //bool (true和false) //char (一个字符) //string (一串字符) int boolSize = sizeof(bool); Console.WriteLine(\"bool 所占的字节数位\" + boolSize); //bool 所占的字节数位1 int charSize = sizeof(char); Console.WriteLine(\"char 所占的字节数位\" + charSize); //char 所占的字节数位2 //string不能用sizeof来看所占内存大小 因为字符串长度是可变的 Console.WriteLine(\"*******************************************\");

变量命名规则

            //驼峰命名法==首字母小写,之后单词首字母大写(变量)            string myName = \"zzx\";            string yourName = \"aaa\";            //帕斯卡命名法--所有单词首字母都大写(函数,类)            string MyName = \"man\";            //c#中大小写是敏感的 区分的

变量命名必须遵守的规则
            //1.不能重名
            //2.不能以数字开头
            //3.不能使用程序关键字命名(蓝色字体)
            //4.不能有特殊符号 下划线除外(空格也是特殊符号不能用)

            //建议使用有含义的--英文(拼音)来表示变量

常量

关键字 const
         

   //固定写法            // const 变量类型 变量名 = 初始值;            const int i = 20;

常量的特点

            //1.必须初始化            //2.不能被修改            const int a;            int b;            const string myName = \"zzx\";            myName = \"aaa\";*/            //作用:声明一些常用不变的变量            //PI            const float PI = 3.1415926f;

转义字符

转义字符是字符串的一部分,用来表示一些特殊含义的字符

            //常用的转义字符            //单引号  \\\'            Console.WriteLine(\"\\\'hahaha\");            //双引号  \\\"            Console.WriteLine(\"\\\"123\\\"\");            //换行  \\n            Console.WriteLine(\"123\\n123\");            //斜杠  \\\\            Console.WriteLine(\"123\\\\\");            //不常用的转义字符            //制表符  \\t(四个空格)            Console.WriteLine(\"123\\t123\");            //光标退格  \\b            Console.WriteLine(\"123\\b123\");            //空字符  \\0            Console.WriteLine(\"123\\0123\");            //警报音  \\a            Console.WriteLine(\"\\a\");            #endregion            #region 取消转义字符 前加@            Console.WriteLine(@\"\\n\\\\\");

类型转换

类型转换 不同变量类型之间的转换

隐式转换

基本规则

隐式转换的基本规则 --自动转换
            大范围转小范围
            double -->float -->所有整形(有符号、无符号)
            decimal -->所有整形(有符号、无符号)
            无符号 不能 隐式存储 有符号
            有符号 可以 隐式存储 无符号(范围小的)

            有符号 long > int > short > sbyte
            无符号 ulong > uint > ushort > byte

            高精度(大范围)装低精度(小范围)
            double -->float -->整数(无符号、有符号)-->char
            decimal -->整数(无符号、有符号)-->char
            string、bool不和其他类型进行隐式转换   

 相同大类型之间的转换

有符号 long > int > short > sbyte(不能用小范围的去装大范围的类型)

无符号 ulong > uint > ushort > byte
浮点数 decimal double float(decimal这个类型没有办法用隐式转换的形式去存储double和float)
特殊类型 bool char string(各自为阵 没关系 不存在隐式转换 )

 //有符号 long > int > short > sbyte            long l = 1;            int i = 1;            short s = 1;            sbyte sb = 1;            l = i; //int隐式转换成了long            //不能用小范围的去装大范围的类型 i = l;            //无符号 ulong > uint > ushort > byte            ulong ul = 1;            uint ui = 1;            ushort us = 1;            byte b = 1;            ul = ui;            us = b;            //浮点数 decimal double float            decimal de = 1.1m;            double d = 1.1;            float f = 1.1f;            //decimal这个类型没有办法用隐式转换的形式去存储double和float            //de = d;            d = f;            //特殊类型 bool char string            //各自为阵 没关系 不存在隐式转换             bool bo = true;            char c = \'a\';            string str = \"asd\";

不同大类型之间的转换

无符号和有符号之间

无符号  (装不下存在负数的有符号数)

有符号装无符号 //有符号变量是可以装无符号变量的,前提是范围是要涵盖的 存在隐式转换

 //无符号  (装不下存在负数的有符号数)            byte b2 = 1;            ushort us2 = 1;            uint ui2 = 1;            ulong ul2 = 1;            //有符号            sbyte sb2 = 1;            short s2 = 1;            int i2 = 1;            long l2 = 1;            //无符号装有符号 --有符号的变量 不能 隐式转换为 无符号的            //b2 = sb2;            //us2 = s2;            // ul2 = sb2;            //有符号装无符号 //有符号变量是可以装无符号变量的,前提是范围是要涵盖的 存在隐式转换            //i2 = ui2;     // int -21亿~21亿多   // uint 0~42亿多的一个范围            i2 = b2;
浮点数和整数(有、无符号)之间

浮点数可以装载任何类型的整数 (大范围装小范围)
虽然decimal不能够隐式存储double、float 但可以隐式存储整形
double -->float -->所有整形(有符号、无符号)
decimal -->所有整形(有符号、无符号)

整数装浮点数 整数不能隐式存储浮点数
 

 //整数装浮点数            float f2 = 1.1f;            double d2 = 1.1;            decimal de2 = 1.1m;            //浮点数可以装载任何类型的整数 (大范围装小范围)            //虽然decimal不能够隐式存储double、float 但可以隐式存储整形            //double -->float -->所有整形(有符号、无符号)            // decimal -->所有整形(有符号、无符号)            f2 = l2;            f2 = i2;            f2 = s2;            f2 = sb2;            f2 = ui2;            f2 = us2;            f2 = b2;            f2 = ul2;            f2 = 10000000000000000000;  //1E+19 科学计数法            Console.WriteLine(f2);            de2 = l2;            de = ul2;            //整数装浮点数 整数不能隐式存储浮点数            //i2 = f2;

特殊类型和其他类型之间的转换

bool不能和其他类型相互隐式转换

char char没有办法隐式存储其他类型
char类型可以隐式转换为整形和浮点型 
转换成数值类型时 对应的数字其实是ASCII码(美国信息交换标准代码)

string 类型不能和其他类型进行隐式转换
 

   //bool bool不能和其他类型相互隐式转换            bool bo2 = true;            char c2 = \'a\';            string str2 = \"abc\";/*                bo2 = c2;                bo2 = str2;                c2 = bo2;                str2 = bo2;                bo2 = i2;                bo2 = ui2;                bo2 = f2;                ui2 = bo2;                f2 = bo2*/            //char char没有办法隐式存储其他类型            //char类型可以隐式转换为整形和浮点型             //转换成数值类型时 对应的数字其实是ASCII码(美国信息交换标准代码)/*            c2 = ui2;            c2 = i2;            c2 = ul2;            c2 = str2;            c2 = f2;*/            i2 = c2;            Console.WriteLine(i2); //97 ‘a’的ASCII码            f2 = c2;            Console.WriteLine(f2);            ui2 = c2;            Console.WriteLine(ui2);            //str2 = c2;            //string 类型不能和其他类型进行隐式转换            /*            i2 = str2;                        ui2 = str2;                        str2 = i2;            */            char name1 = \'赵\';            char name2 = \'x\';            i2 = name2;            Console.WriteLine(i2);            i2 = name1;            Console.WriteLine(i2);

显式转换

显示转换即手动处理、强制转换。

括号强转

括号强转(数值之间)
            一般情况下 将高精度的类型强制转换为低精度
            语法:  变量类型 变量名 = (变量类型) 变量; ()中为想要强转成什么类型
            注意:   精度问题(丢失) 范围问题(异常)           

 //相同大类的整形之间            //有符号整形            sbyte ab = 1;            short s = 1;            int i = 40000;            long l = 1;                        //括号强转可能会出现的问题 造成的异常 超出范围            s = (short)i; //int强制转换成short            Console.WriteLine(s);            //无符号整形            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.24f;            Console.WriteLine(i2);            //char和数值类型            i2 = \'A\';            char c = (char)i2;            Console.WriteLine(c);            //bool和string 不能够通过括号强转            bool bo = true;            //int i3 = (int)bo;            string str3 = \"1233\";            //i3 = (int)str3;

Parse法

Parse法(字符串转数值)
            把字符串类型转换成对应类型
            语法:  变量类型.Parse(“字符串”)
            注意:  字符串必须能够转换成对应类型 否则报错           

 //有符号            int i4 = int.Parse(\"123\");            Console.WriteLine(i4);            //i4 = int.Parse(\"123.45\");            //Console.WriteLine(i4);            //short s3 = short.Parse(\"40000\"); 填写的字符串 1.必须时能够转换成对应类型 2.必须是在对应类型范围之内 否则报错            //Console.WriteLine(s3);            Console.WriteLine(sbyte.Parse(\"1\"));            Console.WriteLine(long.Parse(\"123123\"));            //无符号            Console.WriteLine(ulong.Parse(\"123123\"));            Console.WriteLine(byte.Parse(\"1\"));            Console.WriteLine(uint.Parse(\"1\"));            //浮点数            float f3 = float.Parse(\"1.123\");            double d3 = double.Parse(\"1.123\");            //特殊类型            bool b5 = bool.Parse(\"true\");            Console.WriteLine(b5);            char c2 = char.Parse(\"A\");            Console.WriteLine(c2);

 Convert法

Convert法(精度更高的各种类型之间转换)
            更准确的 各个类型之间进行相互转换
            语法:  Convert.To目标类型(变量或常量)
            注意:  填写的变量或常量必须正确 否则报错           

 //转字符串 字符串同样要合法合规            int a = Convert.ToInt32(\"12\");            Console.WriteLine(a);            Console.WriteLine(Convert.ToInt32(1.7345f));//会四舍五入 精度比括号强转更好            Console.WriteLine(Convert.ToInt32(true));            Console.WriteLine(Convert.ToInt32(false));            Console.WriteLine(Convert.ToInt32(\'A\'));            Console.WriteLine(Convert.ToBoolean(1)); //true            Console.WriteLine(Convert.ToBoolean(0)); //false            Console.WriteLine(Convert.ToBoolean(-1));//true            //精度更准确            //每一个类型都存在对应的 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(0);            Console.WriteLine(bo5);            char c5 = Convert.ToChar(\"a\");            string str5 = Convert.ToString(123445);

ToString法

ToString():其他类型转string、拼接打印
            语法:变量.toString();         

   string str6 = 1.ToString();            str6 = true.ToString();            str6 = \'A\'.ToString();            str6 = 1.2f.ToString();            bool bo6 = true;            str6 = bo6.ToString();                        //当我们进行字符串拼接时,就会自动调用 tostring 转成 string            Console.WriteLine(\"123\" + 1 + true);            #endregion            Console.WriteLine(Convert.ToChar(24069)) ;            Console.WriteLine(int.Parse(\"123\"));            string str10 = Console.ReadLine();            Console.WriteLine(int.Parse(str10));

异常捕获

作用
            //string str = Console.ReadLine();

            //int i = int.Parse(str);

捕获代码可能出现的问题(以上为用户可能输入的不是字符串) 避免程序卡死
           

 #region 语法            //必备部分            try            {                //希望进行异常捕获的代码块                //如果try中的代码 报错了 不会让程序卡死            }            catch            {                //如果出错了 会执行 catch中的代码来捕获异常                //catch(Exception e) 具体报错跟踪 通过e得到 具体的错误信息            }            //可选部分            finally            {                //不管有没有出错 最后都会执行其中的代码                //可写可不写            }            #endregion

举例

            #region 举例            try            {                string str = Console.ReadLine();                int i = int.Parse(str);                Console.WriteLine(i);            }            catch            {                Console.WriteLine(\"输入合法数字\");            }            finally            {                Console.WriteLine(\"执行完毕\");            }            #endregion            try            {                Console.WriteLine(\"请输入语文成绩\");                string yuwen = Console.ReadLine();                Console.WriteLine(int.Parse(yuwen));            }            catch            {                Console.WriteLine(\"输入错误\");            }

算术运算符

优先级
            1.先算乘除取余 后算加减
            int a = 1 + 4 % 2 * 3 / 2 + 1;
            Console.WriteLine(a);

            2.括号可以改变优先级 先计算括号里面内容
            a = 1 + 4 % (2 * 3 / 2) + 1;

           3./多组括号 先算最里层符号 依次往外算
            a = 1 + 4 % (2 * (3 / 2)) +1;

自增减
            //自增运算符
            int a2 = 1;
            a2++; //先用再加
            ++a2; //先加再用 (变量在前就先用变量,加号在前就先加(自增))

            a2 = 1;
            Console.WriteLine(a2++);//1
            //2
            Console.WriteLine(++a2);//3

            //自减运算符
            a2--;
            --a2;

字符串拼接

用+号(+=)拼接 是唯一方法           

 #region 知识点一:字符串拼接方式1            //算数运算符 数值类型变量 进行运算            //string不存在算术运算符计算 但是可以通过+号来进行拼接            string str = \"123\";            str = str + \"456\";            Console.WriteLine(str); //123456            str = str + 1; //默认调用1.toString转换成字符串来进行拼接            Console.WriteLine(str); //1234561            // +=            str += \"456\" + 4 + true;            Console.WriteLine(str); //12345614564True            //先计算等号右边             str += 1 + 2 + 3 + 4;            Console.WriteLine(str); //12345614564True10            //第一个是字符串拼接,后面默认加上Tostring            str += \"\"+ 1 + 2 + 3 + 4;            Console.WriteLine(str); //12345614564True101234            str = \"\";            str += 1 + 2 + \"\" + 3 + 4;            Console.WriteLine(str); //334            str = \"123\";            str = str + 1 + 2 + 3;            Console.WriteLine(str); //123123            #endregion            #region 知识点二:字符串拼接方式2            //string.Format(\"待拼接的内容\",内容1,内容2);            //拼接内容中的固定规则            //想要被拼接的内容用占位符替代{数字} 数字:0——n 依次往后            string str2 = string.Format(\"我是{0},我今年{1}岁,我想要{2}\", \"zzx\", 18, \"好好学习\");            Console.WriteLine(str2);  //我是zzx,我今年18岁,我想要好好学习            int a = 1;            str2 = string.Format(\"{0}{1}{2}{3}\", 1, a, false,str);            Console.WriteLine(str2);  //11False123123            #endregion            #region 控制台打印拼接            //同Format 后面填的内容能多填不能少填            //占位符数字必须从0开始 必须按照顺序            Console.WriteLine(\"我是{0},我今年{1}岁,我想要{2}\", \"zzx\", 18, \"好好学习\");                 //我是zzx,我今年18岁,我想要好好学习            Console.Write(\"我是{0},我今年{1}岁,我想要{2}\", \"zzx\", 18, \"好好学习\");

条件运算符

数值类型可以相互比较。特殊类型只能同类型进行比较。其中因为char可以隐式转换为其他数值类型 可以和数值类型进行比较。char 也可以和字符类型进行大小比较 (ASCII码)

a>b 纯比较不用结果 没有意义 会报错
比较的结果 返回一个bool值(true 、false)

不能进行范围比较

            int a = 5;            //判断是否在某两个值之间            //在主流语言中基本不能这样写            //result = 1 < a < 6; 会报错            //要判断 范围 逻辑运算符

各种应用写法 

            //变量和变量比较            a = 5;            b = 10;            result = a < b; //true            //变量和数值(常量)比较            result = a  5; //true            //数值和数值比较            result = 5 > 3; //true            result = 5 == 3; //true            result = 5 != 3; //true            //计算结果比较 先算算数运算符 再算条件运算符            result = a + 3 > a - 2 + 3; //true            result = 3 + 3 < 5 - 1; //false

只要是数值 就能够比大小 进行条件运算符比较。

特殊类型 char string bool 只能同类型进行 == 和 != 比较 。

其中因为char可以隐式转换为其他数值类型 可以和数值类型进行比较。

char 也可以和字符类型进行大小比较。

逻辑运算符

逻辑与 &&  有假则假 同真为真 (同时满足)

逻辑或  ||    有真则真 同假为假 (只要有一个)
逻辑非 !   对一个bool值进行取反

   // &&            //有假则假 同真为真            bool result = true && false;            Console.WriteLine(result);            result = true && true;            Console.WriteLine(result);            //bool相关的类型 bool变量 条件运算符            result = 3 > 1 && 1  1 && i  1 && i2  1 && i  2);            Console.WriteLine(result);            //逻辑非的优先级较高            int a = 5;            result = !(a > 5);

混合使用优先级问题

逻辑非最高 &&高于||

 || < && < 条件运算符 <  !(逻辑非)  

            bool gameOver = false;            int hp = 100;            bool isDead = false;            bool isMustOver = true;            result = gameOver || hp < 0 && !isDead || isMustOver;            //false || false && true ||true            //false || false ||true            //true            Console.WriteLine(result);//true

逻辑运算符短路问题

            int i3 = 1;            //有真则真            //逻辑与 有假则假 左边满足了条件            //右边的结果不重要 就不会再运算了            result = i3 > 0 || ++i3 >= 1;            Console.WriteLine(i3); //1            Console.WriteLine(result); //true            result = i3 = 1;            Console.WriteLine(i3); //1

位运算符

用数值类型进行计算,将数值转换为2进制 再进行位运算

位与 &:规则 连接两个数值进行位计算 将数值转为二进制,对位运算 有0则0 双1为1

位或 | :规则 连接两个数值进行位计算 将数值转为二进制,对位运算 有1则1 双0为0

异或 ^ :规则 连接两个数值进行位计算 将数值转为二进制,对位运算 相同为0 不同为1

位取反~ :规则 写在数值前面 将数值转为二进制,对位运算 0变1 1变0

左移 <>:

规则 让一个数的二进制数 进行左移或右移,左移几位 右侧加几个0,右移几位 左侧去掉几个数

    #region 知识点一  位与 &            //规则 连接两个数值进行位计算 将数值转为二进制            // 对位运算 有0则0            int a = 1; //001            int b = 5; //101                       //001            int c = a & b;            Console.WriteLine(c);            a = 3;  //00011            b = 19; //10011                    //00011            c = a & b;//3            Console.WriteLine(c);            //多个数值进行位运算 没有括号时 从左往右计算            a = 1;            b = 5;            c = 9;            int d = a & b & c;            Console.WriteLine(d);            #endregion            #region 知识点二 位或 |            //规则 连接两个数值进行位计算 将数值转为二进制            // 对位运算 有1则1            a = 1;            b = 3;            c = a & b;            Console.WriteLine(c); //3            #endregion            #region 知识点三 异或 ^            // 规则 连接两个数值进行位计算 将数值转为二进制            // 对位运算 相同为0 不同为1            a = 1; //001            b = 5; //101                   //100            Console.WriteLine(a ^ b);            a = 10;//1010            b = 11;//1011                   //0001            c = 4; //0100                   //0101            Console.WriteLine(a ^ b ^ c);            #endregion            #region 知识点四 位取反             // 规则 写在数值前面 将数值转为二进制            // 对位运算 0变1 1变0            a = 5;//0101                  // 0 000 0000 0000 0000 0000 0000 0000 0101 (int)正数                  // 1 111 1111 1111 1111 1111 1111 1111 1010      负数(反码补码)            Console.WriteLine(~a);            #endregion            #region 知识点五 左移 <>            // 规则 让一个数的二进制数 进行左移或右移            // 左移几位 右侧加几个0            a = 5; //101            c = a <> 2;            // 10            //  1            Console.WriteLine(c);            #endregion            //35 << 4            //1000110000            //16+32+512            //1000010            //100001

三目运算符

基本语法
            套路 : 3个空位 2个符号
            固定语法 空位     ? 空位                 : 空位
            关键信息 bool类型 ? bool类型为真返回内容 : 为假返回内容
            三目运算符 会有返回值 这个返回值类型必须一致 并且必须使用

            #region 知识点二 具体使用            string str = false ? \"条件为真\" : \"条件为假\";            Console.WriteLine(str);            int a = 5;            str = a > 1 ? \"a满足条件\" : \"a不满足条件\";            Console.WriteLine(str);

           第一个空位始终结果为bool类型( bool类型 条件表达式 逻辑运算符表达式)
           第二、三个空位 什么表达式都可以 要保证结果类型一致