• 第3天c#按位运算和增减buff


    逻辑运算符

    运算结果只能是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("密码错误");
                }
  • 相关阅读:
    valgrind的使用
    php开启gzip压缩
    scrapy
    今天几个bug的排查过程
    awk使用多个分割符
    有用的url
    图片延迟加载
    用中间表提高互联网程序的开发效率
    百度技术沙龙
    vs2005/.NET2.0 控件演示之 文件上传 《FileUpload》
  • 原文地址:https://www.cnblogs.com/yifengs/p/14007208.html
Copyright © 2020-2023  润新知