BZ易风

导航

 

逻辑运算符

运算结果只能是true或false

&&:逻辑与,同真才真,一假则假,例:账号登陆:账号正确&&密码正确

||   :逻辑或,一真则真,全假才假

!  :逻辑非,对表达式的结果取反,例:切换战斗状态

注:只能同类型相比,如果拿int和bool类型比,则报错

三目运算符(表达式1?表达式2:表达式3)

可以用来表示程序分支,简化if-else语句

如果表达式1结果是true,则运行表达式2;如果表达式1为false,则运行表达式3

进制转换

二进制转十进制:低位到高位(即从右往左)计算,第0位的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

十进制转二进制:除2取余法,一直除到0,然后从下往上的书序

位运算符

位运算一定是针对二进制的,两个数再进行位运算时先转成二进制再进行计算

按位与(&)

运算规则:两个数的同一位同时为1结果为1

8 & 9 = 0000 1000 & 0000 1001 = 0000 1000 = 8

按位或(|)

运算规则:两个数的同一位只要有一个为1结果为1

8 | 9 = 0000 1000 | 0000 1001 = 0000 1001 = 9

按位异或(^)

运算规则:两个数的同一位相同结果为0,不同结果为1

8 ^ 9 = 0000 1000 ^ 0000 1001 = 0000 0001 = 1

按位非(~)

运算规则:将当前数的每一位按位进行取反,0变成1,1变成0

~1 = ~0000 0001 = 1111 1110

左移运算符<<

运算规则:将当前数的每一位向左移动,不够以0补。如:

1.1 << 3 = 0000 0001 << 3 = 0000 1000 = 8     即 1<<3 相当于 1*2^3 

2.3 << 3 = 0000 0011 << 2 = 0000 1100 = 12    即 3<<2 相当于 3*2^2

右移运算符>>

运算规则:将当前数的每一位向右移动,不够以0补

1.8 >> 2 = 0000 1000 >> 2 = 0000 0010 = 2

2.12 >> 3 = 0000 1100 >> 3 = 0000 0001 = 1

 

 

位运算符应用--buff

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 按位运算
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 位移
            //int a = 3 << 1;
            //Console.WriteLine(a);
            #endregion

            #region 添加buff
            const int _speed_up = 1;    //加速 0000 0001
            const int _attck = 1 << 1;  //物攻 0000 0010
            const int _dodge = 1 << 2;  //闪避 0000 0100
            const int _magic = 1 << 3;  //法强 0000 1000
            const int _def = 1 << 4;    //防御 0001 0000


            //定义buff
            int buff=0;

            //加物攻BUFF
            buff |= _attck;  // 按位或 两个数同位上的数值有一个为1则为1  
                             //buff     0000 0000
                             //_attck   0000 0010
                             //运算     0000 0010  _attck第1位有1 所以运算后的结果第1位上的数是1  
            buff |= _magic;  //buff     0000 0010
                             //_magic   0000 1000
                             //结果     0000 1010

            //判断是否加上buff;
            string isAtk = (buff&_attck)==_attck?"有攻击buff":"无攻击buff"; // 按位与 两个数同位上的数值全部是1才为1,否则为0
                                                                      //_attck      0000 0010
                                                                      //buff        0000 1010
                                                                      //buff&_attck 0000 0010       buff第3位是1 _attck第3位是0 所以运算结果第3位是0  buff第1位是1 _attck第1位也是1 所以结果第1位是1
            Console.WriteLine(isAtk);
            //消除物攻buff
            buff ^= _attck;           //按位异或    两个数同位上的数值相同位0 不同时为1
                                      //buff        0000 1010
                                      //_attck      0000 0010
                                      //运算        0000 1000         buff第3位是1 _attck第3位是0 所以运算后结果第3位是1 buff第1位是1 _attck第1位也是1 同位数值相同为0 所以结果第1位是0 达到消除_attck的效果
            //判断是否加上buff;
            isAtk = (buff & _attck) == _attck ? "有攻击buff" : "无攻击buff";
            Console.WriteLine(isAtk);
            #endregion


            Console.ReadKey();
        }
    }
}

结果

 

 

判断语句

如果语句块中只有一句话,那么可以省略大括号

1.if语句

 

            Console.WriteLine("请输入你今天的学习时间");
            int stuTime = int.Parse(Console.ReadLine());
            if (stuTime>60)
            {
                Console.WriteLine("今天看学习资料花了{0}分钟,你很努力呦",stuTime);  //如果if括号里面的表达式成立 则会执行这个代码块的代码
            }
            Console.WriteLine("继续学习吧,骚年");      //如果if括号里面的表达式不成立 则会跳过上面代码块直接执行这句代码

 

2.if-else

            Console.WriteLine("请输入一个整数");
            int num = int.Parse(Console.ReadLine());
            if (num % 2 ==0)
            {
                Console.WriteLine("Your input is even");    // 如果num%2结果为0 则执行此句
            }
            else
            {
                Console.WriteLine("Your input is odd");      // 如果num%2结果不为0 则执行此句
            }

 

 

3.if-else-if

如果条件不止一个标准的话,则可以在else后面再加一个条件

注意:if/else if /else 是并列关系,只能执行其中一个,执行完则跳出整个判断语句

            string user = "admin";
            string pwd = "88888";
            Console.WriteLine("请输入用户名");
            string username = Console.ReadLine();
            Console.WriteLine("请输入密码");
            string password2 = Console.ReadLine();
            if (username==user&&password2==pwd)
            {
                Console.WriteLine("密码正确,登录成功!");
            }
            else if(username!=user)           
            {
                Console.WriteLine("用户名不存在");
            }
            else
            {
                Console.WriteLine("密码错误");
            }

 

posted on 2020-11-19 18:24  BZ易风  阅读(358)  评论(0编辑  收藏  举报