当前位置: 首页 > article >正文

十进制左移右移以及IO输出处理记录

左移右移:

    static void Main(string[] args)
        {
            int testNum = 90;
            int index = 4;
            //10000  将1左移四位  得到16
            int res = 1 << index;
            //index=4  0100   就是4向右移2位   0001   
            res = index >> 2;

            int res1 = 1 << index;
            //&与运算   res1和0与,都为1则为1
            res1 = 0 & res1;

            res1 = 1 << index;
            //^或运算  有1为1  res1=10000 ^ 0010=10010=18
            res1 = 2 ^ res1;

        }

<<左移  例如:10010<<3  相当于整体往前前移三位  10010000

>>右移    例如:10010>>3   相当于后面三位右移后将舍弃变成00010

&与运算,和&&类似,全为1则为1

原理:&是按位与运算符,用于对两个整数类型(如intlong等)的操作数进行按位与操作。它会对两个操作数的每一位按照二进制形式进行逻辑与操作。具体规则是:当对应位上两个数字都为1时,该位结果为1;否则,该位结果为0

&&逻辑与运算:

原理:&&是逻辑与运算符,用于对两个布尔类型的操作数进行逻辑与操作。它会判断两个操作数是否都为true,如果是,则整个表达式的结果为true;只要有一个操作数为false,整个表达式的结果就为false。并且,&&运算符具有短路特性,即当第一个操作数为false时,不会再计算第二个操作数,因为无论第二个操作数是什么,整个表达式的结果都已经确定为false了。

对输出IO的算法:

   internal void SetIO(short index,bool IsON)
        {
            lock (_lockUpdateIO)
            {
                try
                {
                    if (Connect.IsConnected)
                    {
                        short _con = 4;
                        //short indexb = (short)(index + _con);
                        int nowresult = Out_GetAll();
                        //比如当前index=4   是第四个IO输出   将1左移4位=10000  然后与当前已经输出的Out做与运算,都是1则为1  即,如果该输出已经输出为1了,再次输出的时候,只有设置为false的情况才能做移位计算工作
                       // 否则如果小于0   则代表当前该IO输出是false   则不进行操作,只有ISON=true的时候,才进行移位操作。
                       if((nowresult & (1 << index)) > 0)
                        {
                            if (IsON == false)
                            {
                                nowresult = nowresult ^ (1 << index);
                            }
                        }
                        else
                        {
                            if(IsON)
                            {
                                nowresult = nowresult ^ (1 << index);
                            }
                        }
//要用Ushort类型  如果用short类型的话,32768再读出来会等于-32767    用Ushort则不会
                        Connect.PreSetMultiReg(_con, GetUShortArray(nowresult.ToString()));
                    }

                    //   Connect.Send(result2.ToString());
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }

            }
        }

思路:先要判断该输出是否已经输出为true,如果是的话,只做该输出的 false运算。如果该输出为false的话,则只对该输出做true的运算。不要做重复操作。

Short与Ushort的区别:

  • short
    • short是有符号短整型,在 C# 中它占用 2 个字节(16 位)。因为它是有符号的,所以可以表示正数和负数。其取值范围是从 - 32,768(即 )到 32,767(即)。这是因为最高位用于表示符号(0 表示正数,1 表示负数),剩下的 15 位用于表示数值大小。
  • ushort
    • ushort是无符号短整型,同样占用 2 个字节(16 位)。由于它是无符号的,只能表示非负数,所以其取值范围是从 0 到 65,535(即)。所有的 16 位都用于表示数值大小。

 


http://www.kler.cn/a/419600.html

相关文章:

  • 使用 LLaMA-Factory 微调
  • 【第 1 章 初识 C 语言】1.8 使用 C 语言的 7 个步骤
  • [node.js] [HTTP/S] 实现 requests 发起 HTTP/S/1.1/2.0 请求
  • node.js @ffmpeg-installer/ffmpeg 桌面推流
  • 行为型设计模式之《责任链模式》实践
  • Java基于SpringBoot+Vue的IT技术交流和分享平台(附源码+lw+部署)
  • 基于Java Springboot房屋出售租赁系统
  • torch_geometric使用手册-Creating Graph Datasets(专题四)
  • 《C++ Primer Plus》学习笔记|第1章 预备知识 (24-12-2更新)
  • Python的学习路线
  • opensatck-海光C86芯片的计算节点直通英伟达T4 GPU加速卡的操作记录
  • Vue单页面应用和多页面应用
  • Python3 多线程使用concurrent.futures
  • tomcat 8在idea启动控制台乱码
  • 四元数Quaternion的概念以及应用领域和处理方法
  • 无法通过windows功能控制面板自动安装或卸载windows server角色和功能
  • 【人工智能】用Python实现卷积神经网络(CNN)进行图像分类:从零开始的深度学习教程
  • Linux 各个目录作用
  • 如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件
  • 会展观众数据收集与分析
  • PGSQL:联合唯一索引的创建和删除
  • SpringBoot 整合 Avro 与 Kafka
  • Android——android相对布局(RelativeLayout)及各属性
  • go语言切片
  • 鸿蒙开发-ArkTs中实现websocket功能
  • 使用 Spring AOP 实现日志记录