C#,二进制数的按位交换(Bits swap)的算法与源代码

数字在指定位置指定位数的交换是常见算法。

1 源程序

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Algorithm_Gallery
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="x">数字</param>
        /// <param name="p1">位置1</param>
        /// <param name="p2">位置2</param>
        /// <param name="n">交换字节数目</param>
        /// <returns></returns>
        public static int Bits_Swap(int x, int p1, int p2, int n)
        {
            int set1 = (x >> p1) & ((1 << n) - 1);

            int set2 = (x >> p2) & ((1 << n) - 1);

            int xor = (set1 ^ set2);

            xor = (xor << p1) | (xor << p2);

            int result = x ^ xor;

            return result;
        }

        public static int Bits_Swap_Second(int x, int p1, int p2, int n)
        {
            int xor = (int)(((x >> p1) ^ (x >> p2)) & ((1U << n) - 1));
            return x ^ ((xor << p1) | (xor << p2));
        }


        public static int Bits_Swap_Third(int x, int p1, int p2, int n)
        {
            int shift1, shift2, value1, value2;
            while ((n--) > 0)
            {
                shift1 = 1 << p1;
                shift2 = 1 << p2;
                value1 = ((x & shift1));
                value2 = ((x & shift2));

                if ((value1 == 0 && value2 != 0) || (value2 == 0 && value1 != 0))
                {
                    if (value1 != 0)
                    {
                        x = x & (~shift1);
                        x = x | shift2;
                    }
                    else
                    {
                        x = x & (~shift2);
                        x = x | shift1;
                    }
                }
                p1++;
                p2++;
            }

            return x;
        }
    }
}

POWER BY TRUFFER.CN
BY 315SOFT.COM

 

2 代码格式

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Algorithm_Gallery
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="x">数字</param>
        /// <param name="p1">位置1</param>
        /// <param name="p2">位置2</param>
        /// <param name="n">交换字节数目</param>
        /// <returns></returns>
        public static int Bits_Swap(int x, int p1, int p2, int n)
        {
            int set1 = (x >> p1) & ((1 << n) - 1);

            int set2 = (x >> p2) & ((1 << n) - 1);

            int xor = (set1 ^ set2);

            xor = (xor << p1) | (xor << p2);

            int result = x ^ xor;

            return result;
        }

        public static int Bits_Swap_Second(int x, int p1, int p2, int n)
        {
            int xor = (int)(((x >> p1) ^ (x >> p2)) & ((1U << n) - 1));
            return x ^ ((xor << p1) | (xor << p2));
        }


        public static int Bits_Swap_Third(int x, int p1, int p2, int n)
        {
            int shift1, shift2, value1, value2;
            while ((n--) > 0)
            {
                shift1 = 1 << p1;
                shift2 = 1 << p2;
                value1 = ((x & shift1));
                value2 = ((x & shift2));

                if ((value1 == 0 && value2 != 0) || (value2 == 0 && value1 != 0))
                {
                    if (value1 != 0)
                    {
                        x = x & (~shift1);
                        x = x | shift2;
                    }
                    else
                    {
                        x = x & (~shift2);
                        x = x | shift1;
                    }
                }
                p1++;
                p2++;
            }

            return x;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/394289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用CompletableFuture在主线程捕获子线程异常

场景&#xff1a;我们使用线程池的时候&#xff0c;假如说某个线程出现了异常此时我们需要将异常捕获打印出相应的异常日志 这个时候就可以用到CompletableFuture的exceptionally方法&#xff0c;其作用是返回一个新的CompletableFuture&#xff0c;如果原CompletableFuture以…

论UI的糟糕设计:以百度网盘为例

上面这一排鼠标一经过就会弹出来&#xff08;不是点才弹出来&#xff09;&#xff0c;然后挡住你的各种操作&#xff0c; 弹出来时你就必须等它消失&#xff0c;卡一下才能操作。 在用户顺畅地操作内容时&#xff0c;经常就卡一下、卡一下、卡一下…… 1、比如鼠标从下到上&am…

Java,SpringBoot项目中,Postman的测试方法。

展示查询搜索 // 根据姓名分页查询用户GetMapping("/getUsersByName")public IPage<User> getUsersByName(RequestParam(defaultValue "1") Long current,RequestParam(defaultValue "2") Long size,RequestParam(required false) Stri…

ALINX黑金AXU3EGB 开发板用户手册RS485通信接口图示DI RO信号方向标识错误说明

MAX3485这类RS485芯片&#xff0c;DI是TTL信号输入&#xff0c;RO是TTL信号输出 如下图是MAX3485手册规格书。 因此 ALINX黑金AXU3EGB 用户手册 Page 43页 图 3-11-1 PL 端 485 通信的连接示意图&#xff0c;MAX3485芯片的DI RO信号输入输出标识方向是错误的&#xff0c;应为蓝…

C++-opencv的imread、imshow、waitkey、namedWindow

在C中使用OpenCV时&#xff0c;imread和imshow是两个非常基础且常用的函数&#xff0c;用于读取图像和显示图像。以下是这两个函数的简要说明和如何一起使用它们的示例。 imread函数 imread用于从指定的文件路径读取图像。它将图像读入为cv::Mat对象&#xff0c;这是OpenCV中…

Pulsar-架构与设计

Pulsar架构与设计 一、背景和起源二、框架概述1.设计特点2.框架适用场景 三、架构图1.Broker2.持久化存储&#xff08;Persistent storage&#xff09;3.Pulsar元数据&#xff08;Metadata store&#xff09; 四、功能特性1.消息顺序性2.消息回溯3.消息去重4.消息重投递5.消息重…

SPSSAU【文本分析】|我的词库

我的词库 文本分析时&#xff0c;可能涉及到一些新词&#xff0c;比如‘内卷’&#xff0c;这个词很可能在词典中并未出现过&#xff0c;词库也不认识它。但研究者自己认识它&#xff0c;此时可将该词纳入到新词词库中&#xff0c;让系统统计词频等信息时也对该词进行统计。当…

内存池源码剖析

SGI STL vector内存池源码 SGI STL包含了一级空间配置器和二级空间配置器&#xff0c;其中一级空间配置器allocator采用malloc和free来 管理内存&#xff0c;和C标准库中提供的allocator是一样的&#xff0c;但其二级空间配置器allocator采用了基于freelist 自由链表原理的内存…

MySql性能优化

0 引言 MySQL优化&#xff0c;一方面是找出系统的瓶颈&#xff0c;提高MySQL数据库整体的性能&#xff1b;另一方面需要合理的结构设计和参数调整&#xff0c;以提高用户操作响应的速度&#xff1b;同时还要尽可能节省系统资源&#xff0c;以便系统可以提供更大负荷的服务。 …

Django后端开发——模型层及ORM介绍

文章目录 参考资料Django配置MySQL安装mysqlclient创建数据库进入数据库的操作可能遇到的问题及解决方案Pycharm配置settings.py 模型![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c83753397bf6481d8defde26537903bf.png)ORM介绍示例终端&#xff1a;settings.py…

transformer 最简单学习1 输入层embeddings layer

词向量的生成可以通过嵌入层&#xff08;Embedding Layer&#xff09;来完成。嵌入层是神经网络中的一种常用层&#xff0c;用于将离散的词索引转换为密集的词向量。以下是一个典型的步骤&#xff1a; 建立词表&#xff1a;首先&#xff0c;需要从训练数据中收集所有的词汇&…

open3d DBSCAN 聚类

DBSCAN 聚类 一、算法原理1.密度聚类2、主要函数 二、代码三、结果四、相关数据 一、算法原理 1.密度聚类 介绍 基于密度的噪声应用空间聚类(DBSCAN)&#xff1a;是一种无监督的ML聚类算法。无监督的意思是它不使用预先标记的目标来聚类数据点。聚类是指试图将相似的数据点分…

ALINX黑金AXU3EGB 开发板用户手册 CAN接口信号方向标识错误说明

如上篇文章 CAN收发器 SN65HVD232 的D R引脚方向是 D是输入&#xff0c;R是输出。 https://blog.csdn.net/zhengwenbang/article/details/136151668?spm1001.2014.3001.5501 因此 ALINX黑金AXU3EGB 用户手册 Page 43页 图 3-10-1 PS 端 CAN 收发芯片的连接示意图&#xff0c;…

[深度学习] 深入理解什么是卷积神经网络

​ &#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[深度学习] ❤️ 热门学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…

七、动态菜单—递归组件的使用

layout布局 左侧菜单menu页面刷新后默认高亮 左侧菜单组件 Menu <template><template v-for"(item, index) in menuList" :key"item.path"><!-- 没有子路由 --><template v-if"!item.children"><el-menu-item v-if&…

宇通壹基金交通安全训练营走进瑞金市九天社区

春节即将临近&#xff0c;孩子的安全是家长们最大的牵挂&#xff0c;培养良好的交通安全意识和出行习惯从日常教育做起。2月6日上午&#xff0c;瑞金赋能公益联合瑞金市九天社区新时代文明实践站&#xff0c;在九天御景小区开展宇通壹基金交通安全训练营进社区暨“关注交通安全…

机器人初识 —— 电机传动系统

一、背景 波士顿动力公司开发的机器人&#xff0c;其电机传动系统是其高性能和动态运动能力的核心部分。电机传动系统通常包括以下几个关键组件&#xff1a; 1. **电动马达**&#xff1a;波士顿动力的机器人采用了先进的电动马达作为主要的动力源&#xff0c;如伺服电机或步进…

【Docker】docker安装

需要云服务器等云产品来学习Linux可以移步/-->腾讯云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Ubuntu安装docker 1、查看操作系统和CPU架构 2、卸载docker 3、配置docker下载源 4、安装docker 5、解决报错…

springboot745简历系统

springboot745简历系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

vue+springboot登录与注册功能的实现

①首先写一个登录页面 <template> <div style"background-color: #42b983;display: flex;align-items: center;justify-content: center;height: 100vh"><div style"background-color: white;display: flex;width: 50%;height: 50%;overflow: h…