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

news2025/1/16 13:52:49

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

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;
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java——Stream流的学习

在开发过程中&#xff0c;经常或忽略流的使用&#xff0c;导致用的不熟练&#xff0c;于是抽时间系统的学习下stream的使用&#xff0c;找了哔哩哔哩的教程跟着看看练练。 准备工作 创建Book、Aurhor实体类&#xff0c;初始化数据 public static List<Author> getAuth…

图形渲染基础学习

原文链接&#xff1a;游戏开发入门&#xff08;三&#xff09;图形渲染_如果一个面只有三个像素进行渲染可以理解为是定点渲染吗?-CSDN博客 游戏开发入门&#xff08;三&#xff09;图形渲染笔记&#xff1a; 渲染一般分为离线渲染与实时渲染&#xff0c;游戏中我们用的都是…

浙大恩特客户资源管理系统 FollowAction SQL注入漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统 FollowAction 接口处存在SQL注入漏洞,未经身份认证的攻击者可以利用该漏…

补-代码随想录第23天|● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树

二叉树最后一天 ● 669. 修剪二叉搜索树思路一&#xff1a;递归递归三部曲代码&#xff1a; 思路二&#xff1a;迭代代码&#xff1a; ● 108.将有序数组转换为二叉搜索树思路&#xff1a;递归代码;[左闭右闭] ● 538.把二叉搜索树转换为累加树思路&#xff1a;递归 代码&#…

onlyoffice基础环境搭建+部署+demo可直接运行 最简单的入门

office这个体系分为四个大教程 1、【document server文档服务器基础搭建】 2、【连接器(connector)或者jsApi调用操作office】-进阶 3、【document builder文档构造器使用】-进阶 4、【Conversion API(文档转化服务)】-进阶 如果需要连接器&#xff0c;可以查看&#xff1a;onl…

【SpringBoot3】Spring Security 常用注解

注&#xff1a;本文基于Spring Boot 3.2.1 以及 Spring Security 6.2.1 Spring Security 6 的常用注解包括以下几种&#xff0c;通过这些注解可以更加方便的控制资源权限。 Secured &#xff1a;方法执行前检查&#xff0c;直接判断有没有对应的角色PreAuthorize&#xff1a;方…

Jmeter实现阶梯式线程增加的压测

安装相应jmeter 插件 1&#xff1a;安装jmeter 管理插件&#xff1a; 下载地址&#xff1a;https://jmeter-plugins.org/install/Install/&#xff0c;将下载下来的jar包放到jmeter文件夹下的lib/ext路径下&#xff0c;然后重启jmeter。 2&#xff1a;接着打开 选项-Plugins Ma…

【FastAPI】P3 请求与响应

目录 请求路径参数查询参数 响应JSON 响应文本响应返回 Pydantic 模型 在网络通讯中&#xff0c;请求&#xff08;Request&#xff09; 与 响应&#xff08;Response&#xff09; 扮演着至关重要的角色&#xff0c;它们构成了客户端与服务器间互动的根本理念。 请求&#xff0…

PMP考完之后考什么,NPDP值得考吗?

PMP考完之后可以考虑考一个NPDP证书&#xff0c;从事新产品开发相关工作的学习下NPDP是很有必要的~参与新产品开发相关的中高层管理人员&#xff0c;产品团队成员等非常适合学习NPDP。 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理…

【MySQL初阶】索引

1. 索引基本概念 1.1 索引介绍 索引(index)&#xff1a;是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或者多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。&#xff08;具体细节在MySQL进阶章节详…

如何使用IP代理解决亚马逊账号IP关联问题?

亚马逊账号IP关联问题是指当同一个IP地址下有多个亚马逊账号进行活动时&#xff0c;亚马逊会将它们关联在一起&#xff0c;从而可能导致账号被封禁或限制。 为了避免这种情况&#xff0c;许多人选择使用IP代理。 IP代理为什么可以解决亚马逊IP关联问题&#xff1f; IP代理是…

3d模型渲染了是白色的什么原因?怎么解决?--模大狮模型网

3D模型渲染成白色的原因可能有几种情况&#xff1a; 一&#xff1a;材质设置问题 检查模型的材质设置&#xff0c;确保正确指定了颜色或纹理。有时候&#xff0c;默认的材质颜色可能是白色&#xff0c;您可以尝试修改材质属性来改变渲染结果。 二&#xff1a;光照设置问题 检…

点餐|外卖订餐小程序|基于微信小程序的外卖订餐系统设计与实现(源码+数据库+文档)

点餐|外卖订餐小程序目录 目录 基于微信小程序的外卖订餐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户微信端功能模块 2、管理员服务端功能模块 3、商家务端功能模块 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设…

【Java多线程】线程安全问题与解决方案

目录 1、线程安全问题 1.2、线程安全原因 2、线程加锁 2.1、synchronized 关键字 2.2、完善代码 2.3、对同一个线程的加锁操作 3、内容补充 3.1、内存可见性问题 3.2、指令重排序问题 3.3、解决方法 3.4、总结 volatile 关键字 1、线程安全问题 某个代码&#xff…

雷卯有多种封装3.3V的ESD DIODE供您选择

一&#xff0e;3.3V ESD型号如下 二&#xff0e;多种多路封装 三&#xff0e;3.3V保护方案 方案优点&#xff1a;用于满足IC VCC 3.3V的静电浪涌保护&#xff0c;根据电源所处环境选择合适保护电流的ESD器件&#xff1b;高速传输接口选择超低电容ULC0511CDN&#xff0c;保证信…

友点CMS GetSpecial SQL注入漏洞复现

0x01 产品简介 友点CMS是一款高效且灵活的网站管理系统,它为用户提供了简单易用的界面和丰富的功能。无论是企业还是个人,都能通过友点CMS快速搭建出专业且美观的网站。该系统支持多种内容类型和自定义模板,方便用户按需调整。同时,它具备强大的SEO功能,能提升网站在搜索…

高并发系统中常见的问题

在当今的高并发系统中&#xff0c;常见的问题是多种多样的&#xff0c;这些问题往往会对系统的稳定性和性能产生重大影响。本文将详细介绍高并发系统中常见的问题&#xff0c;并探讨其产生原因和解决方案。 一、高并发系统概述 高并发系统是指在同一时间内有大量用户同时访问…

Sui在Dacade推出Move课程,完成学习奖励SUI

Dacade推出了一门Sui开发者课程&#xff0c;通过一系列引人入胜的挑战&#xff0c;为开发者提供了一个沉浸式的Move技术之旅。在这门课程中&#xff0c;Dacade的教育材料将引导用户利用Sui强大的DeFi原生功能&#xff08;包括DeepBook和zkLogin&#xff09;构建DeFi应用。此外&…

Tofu5m 高速实时推理Yolov8

Tofu5m 是高性价比目标识别跟踪模块&#xff0c;支持可见光视频或红外网络视频的输入&#xff0c;支持视频下的多类型物体检测、识别、跟踪等功能。 实测视频链接&#xff1a;Tofu5m识别跟踪模块_哔哩哔哩_bilibili 产品支持视频编码、设备管理、目标检测、深度学习识别、跟踪…

c++类和对象新手保姆级上手教学(中)

前言&#xff1a; 类和对象中篇&#xff0c;这里讲到的前4个默认成员函数&#xff0c;是类和对象中的重难点&#xff0c;许多资料上的讲法都非常抽象&#xff0c;难以理解&#xff0c;所以我作出这篇总结&#xff0c;分享学习经验&#xff0c;以便日后复习。 目录 6个默认成员…