一.引言
前面结束了变量的一些基本概念,下面就会进入到程序控制流相关的学习
二.运算符基础
运算符的基础在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语言阶段没有记录这个的学习过程,这里就简单记录一下,说是在游戏开发过程会用到位运算,所以这里就简单通过代码的方式来记录一下
- 按位与&
// 规则 连接两个数值进行位计算 将数值转为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);
- 其实就目前来说,只有左移右移用的频繁点,因为右移等价于除以2,左移等价于乘以2,这个稍微演算一下就懂,下面以5除以2和乘以2来说,5的二进制是101
2-1*101->2-1*(22+20)->21+2-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 - string.Format("待拼接的内容",内容一,内容二,.....)
这里的拼接方式终端打印的时候也可以用// 拼接内容中的固定规则 // 想要被拼接的内容用占位符替代 {数字} 数字:0~n 依次往后,占位符的意思,依次填充 string str2 = string.Format("我是{0},我今年{1},我想要{2}","cx",20,"好好学习"); Console.WriteLine(str2); - 类似于Kotlin中的字符串模板,用于拼接变量
这种方式比较推荐,在Unity开发时也常用int age = 10; string name = "cx"; string str3 = $"我叫{name},我今年{age}岁了";
五.程序控制流
开始控制流之前,稍微提一嘴,优先级:算术运算>条件运算>逻辑运算
逻辑或(||)与逻辑与(&&)的短路情况
- 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; }
六.控制台相关操作
介绍控制台相关得操作是为了给后面的一个控制台小实例做铺垫
- ReadKey(true)不会把输入的内容显示在控制台上
char c = Console.ReadKey(true).KeyChar; - 控制台其它方法
//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中的也无差别
七.总结
基础篇到此也就结束了,后续通过一个小例子来演示,做一个基础收尾