C#基本语法整理-位运算&程序控制流&控制台相关

239 阅读6分钟

一.引言

前面结束了变量的一些基本概念,下面就会进入到程序控制流相关的学习

二.运算符基础

运算符的基础在C语言阶段已经深入学习过了,这里就不多强调了,下面列一下经常迷糊的地方

            // 连续运算 先算右侧结果,在赋值给左侧变量,用变量的值替换变量的位置即可
            i = 1 + 3 + 89 + i + i;
            Console.WriteLine(i);
            // 记住看见等号,先算右边就行
            int j = 1;
            j += 10 / 2 * 3; // 先算等号右边的内容,简化后变成 j += 15 -> j = j + 15
            // 做一个比较经典的自增减运算题
            int a = 10, b = 20;
            int res = a++ + b++ + a++; // 10 + 20 + 11->41 第一个a++,用了之后,a就成了11
  • 这里记录一个交换两个数比较巧妙的方式,经典做法就是定义一个temp中间临时变量,这里可以通过算数运算交换两个数的值,仅限基本类型的变量交换
                int x = 10;
                int y = 9;
                x = x + y; // x = 10 + 9;
                y = x - y; // y = 10 + 9 - 9 = 10
                x = x - y; // x = 10 + 9 - 10 = 9
    

普通的运算肯定没什么好说的, 更多详细的内容可以看这篇文章

三.位运算符

由于C语言阶段没有记录这个的学习过程,这里就简单记录一下,说是在游戏开发过程会用到位运算,所以这里就简单通过代码的方式来记录一下

  1. 按位与&
            // 规则 连接两个数值进行位计算 将数值转为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. 按位或|
            // 规则 连接两个数值进行位计算 将数值转为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);
    
  3. 按位异或
            // 规则 连接两个数值进行位计算 将数值转为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);
    
  4. 按位取反
            // 规则 写在数值前面 将数值转为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);
    
  5. 左移右移
            // 规则 让一个数的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);
  • 其实就目前来说,只有左移右移用的频繁点,因为右移等价于除以2,左移等价于乘以2,这个稍微演算一下就懂,下面以5除以2和乘以2来说,5的二进制是101
    2-1*101->2-1*(22+20)->21+2-1,那不就是指数减1吗,指数减1就是对应的位置向右移动了一位,左移同理,这里就不推演了

四.字符串的拼接

  1. 通过+来拼接,这里主要是有一些坑
    // 之前的算数运算符只是用数值类型变量进行数学运算
    // string不存在算数运算符不能计算,但可以通过+来进行拼接
    string str1 = "fab";
    str1 += "a" + 1 + true;
    Console.WriteLine(str1);
    str1 += 1 + 2 + 3 + 4;
    Console.WriteLine(str1); // 这里比较坑,因为右边都是同一类型,所以是先算数运算再拼接,直接拼接10
    str1 += 1 + 2 +" " + 3 + 4; // 这种情况也比较特别,只要出现字符串,那么后续的部分都会按照字符串的方式进行拼接
    Console.WriteLine(str1); // 3 34
    
  2. string.Format("待拼接的内容",内容一,内容二,.....)
    // 拼接内容中的固定规则
    // 想要被拼接的内容用占位符替代 {数字} 数字:0~n 依次往后,占位符的意思,依次填充
    string str2 = string.Format("我是{0},我今年{1},我想要{2}","cx",20,"好好学习");
    Console.WriteLine(str2);
    
    这里的拼接方式终端打印的时候也可以用
  3. 类似于Kotlin中的字符串模板,用于拼接变量
    int age = 10;
    string name = "cx";
    string str3 = $"我叫{name},我今年{age}岁了";
    
    这种方式比较推荐,在Unity开发时也常用

五.程序控制流

开始控制流之前,稍微提一嘴,优先级:算术运算>条件运算>逻辑运算
逻辑或(||)与逻辑与(&&)的短路情况

  • if控制流没什么特别的,和C语言一样,稍微提一嘴switch控制流,有一个比较特别,称之为贯穿
            //作用:满足某些条件时 做的事情是一样的 就可以使用贯穿
            int aa = 1;
            switch (aa)
            {
                // 不写case后面配对的break 就叫做贯穿
                // 满足 1 3 4 2其中一个条件 就会执行 之后的代码
                case 1:
                case 3:
                case 4:
                case 2:
                    Console.WriteLine("前面条件都满足,就贯穿到这里吧");
                    break;
                default:
                    break;
            }
    

六.控制台相关操作

介绍控制台相关得操作是为了给后面的一个控制台小实例做铺垫

  1. ReadKey(true)不会把输入的内容显示在控制台上
    char c = Console.ReadKey(true).KeyChar;
  2. 控制台其它方法
             //1.清空
            Console.Clear();
    
            //2.设置控制台大小
            // 窗口大小 缓冲区大小
            // 注意:
            //1.先设置窗口大小,再设置缓冲区大小
            //2.缓冲区的大小不能小于窗口的大小
            //3.窗口的大小不能大于控制台的最大尺寸
            //窗口大小
            Console.SetWindowSize(100, 50);
            //缓冲区大小 (可打印内容区域的宽高 )
            Console.SetBufferSize(1000, 1000);
    
            //3.设置光标的位置
            //控制台左上角为原点0 0 右侧是X轴正方向 下方是Y轴正方向 它是一个平面二维坐标系
            //注意:
            //1.边界问题
            //2.横纵距离单位不同 1y = 2x 视觉上的
            Console.SetCursorPosition(10, 5);
            Console.WriteLine("123123");
    
            //4.设置颜色相关
            //文字颜色设置
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("123123123");
            Console.ForegroundColor = ConsoleColor.Green;
            //背景颜色设置
            //Console.BackgroundColor = ConsoleColor.White;
            //重置背景颜色过后 需要Clear一次 才能把整个背景颜色改变
            //Console.Clear();
    
            //5.光标显隐
            Console.CursorVisible = false;
    
            //6.关闭控制台
            Environment.Exit(0);
    

    这里就简单记录一下,另外随机数的生成和java中很类似,注意是左闭右开,还有异常捕获,和java中的也无差别

七.总结

基础篇到此也就结束了,后续通过一个小例子来演示,做一个基础收尾