zoukankan      html  css  js  c++  java
  • BitOperation.cs

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Bit
    {
        /*class methods for bits operation*/
        public class BitOperation
        {
            public Byte setBit(Byte targetByte, int targetPos, int value)
            {
                if ((value == 0 || value == 1) && (targetPos >= 0 && targetPos < 8))
                {
                    int targetPosValue = -1;
                    switch (targetPos)
                    {
                        case 0:
                            targetPosValue = (targetByte >> 7) & 0x01;
                            if (targetPosValue == value)   //如果指定位的值和传的参数值相同,则没有任何操作,返回
                            {
                                break;
                            }
                            else
                            {
                                if (value == 1)
                                {
                                    targetByte = Convert.ToByte(targetByte | 0x80);
                                }
                                else if (value == 0)
                                {
                                    targetByte = Convert.ToByte(targetByte & 0x7f);
                                }
                                break;
                            }
                        case 1:
                            targetPosValue = (targetByte >> 6) & 0x01;
                            if (targetPosValue == value)   //如果指定位的值和传的参数值相同,则没有任何操作,返回
                            {
                                break;
                            }
                            else
                            {
                                if (value == 1)
                                {
                                    targetByte = Convert.ToByte(targetByte | 0x40);
                                }
                                else if (value == 0)
                                {
                                    targetByte = Convert.ToByte(targetByte & 0xbf);
                                }
                                break;
                            }
                        case 2:
                            targetPosValue = (targetByte >> 5) & 0x01;
                            if (targetPosValue == value)   //如果指定位的值和传的参数值相同,则没有任何操作,返回
                            {
                                break;
                            }
                            else
                            {
                                if (value == 1)
                                {
                                    targetByte = Convert.ToByte(targetByte | 0x20);
                                }
                                else if (value == 0)
                                {
                                    targetByte = Convert.ToByte(targetByte & 0xdf);
                                }
                                break;
                            }
                        case 3:
                            targetPosValue = (targetByte >> 4) & 0x01;
                            if (targetPosValue == value)   //如果指定位的值和传的参数值相同,则没有任何操作,返回
                            {
                                break;
                            }
                            else
                            {
                                if (value == 1)
                                {
                                    targetByte = Convert.ToByte(targetByte | 0x10);
                                }
                                else if (value == 0)
                                {
                                    targetByte = Convert.ToByte(targetByte & 0xef);
                                }
                                break;
                            }
                        case 4:
                            targetPosValue = (targetByte >> 3) & 0x01;
                            if (targetPosValue == value)   //如果指定位的值和传的参数值相同,则没有任何操作,返回
                            {
                                break;
                            }
                            else
                            {
                                if (value == 1)
                                {
                                    targetByte = Convert.ToByte(targetByte | 0x08);
                                }
                                else if (value == 0)
                                {
                                    targetByte = Convert.ToByte(targetByte & 0xf7);
                                }
                                break;
                            }
                        case 5:
                            targetPosValue = (targetByte >> 2) & 0x01;
                            if (targetPosValue == value)   //如果指定位的值和传的参数值相同,则没有任何操作,返回
                            {
                                break;
                            }
                            else
                            {
                                if (value == 1)
                                {
                                    targetByte = Convert.ToByte(targetByte | 0x04);
                                }
                                else if (value == 0)
                                {
                                    targetByte = Convert.ToByte(targetByte & 0xfb);
                                }
                                break;
                            }
                        case 6:
                            targetPosValue = (targetByte >> 1) & 0x01;
                            if (targetPosValue == value)   //如果指定位的值和传的参数值相同,则没有任何操作,返回
                            {
                                break;
                            }
                            else
                            {
                                if (value == 1)
                                {
                                    targetByte = Convert.ToByte(targetByte | 0x02);
                                }
                                else if (value == 0)
                                {
                                    targetByte = Convert.ToByte(targetByte & 0xfd);
                                }
                                break;
                            }
                        case 7:
                            targetPosValue = targetByte & 0x01;
                            if (targetPosValue == value)   //如果指定位的值和传的参数值相同,则没有任何操作,返回
                            {
                                break;
                            }
                            else
                            {
                                if (value == 1)
                                {
                                    targetByte = Convert.ToByte(targetByte | 0x01);
                                }
                                else if (value == 0)
                                {
                                    targetByte = Convert.ToByte(targetByte & 0xfe);
                                }
                                break;
                            }
                        default:
                            break;
                    }
                    return targetByte;
                }
                else
                {
                    return 0;
                }
            }
    
            public int getBit(Byte targetByte, int targetPos)
            {
                int value = -1;
    
                switch (targetPos)
                {
                    case 0:
                        value = (targetByte >> 7) & 0x01;
                        break;
                    case 1:
                        value = (targetByte >> 6) & 0x01;
                        break;
                    case 2:
                        value = (targetByte >> 5) & 0x01;
                        break;
                    case 3:
                        value = (targetByte >> 4) & 0x01;
                        break;
                    case 4:
                        value = (targetByte >> 3) & 0x01;
                        break;
                    case 5:
                        value = (targetByte >> 2) & 0x01;
                        break;
                    case 6:
                        value = (targetByte >> 1) & 0x01;
                        break;
                    case 7:
                        value = targetByte & 0x01;
                        break;
                    default:
                        break;
                }
                return value;
            }
        }
    }
    
  • 相关阅读:
    什么是web标准??
    狗子哥虽然失业了,但是生活才刚刚开始啊
    ionic hidden scroll bar
    参数化查询 '(@ActualShipTime datetime' 需要参数 @AuthorizationNumber,但未提供该参数。
    C# 使用PrintDocument 绘制表格 完成 打印预览 DataTable
    Linq 中按照多个值进行分组(GroupBy)
    OpenXml SDK 2.0 创建Word文档 添加页、段落、页眉和页脚
    Linq to sql 消除列重复 去重复
    添加访问人数统计
    国内各大互联网公司相关技术站点2.0版 (集合腾讯、阿里、百度、搜狐、新浪、360等共49个)
  • 原文地址:https://www.cnblogs.com/jingmoxukong/p/2121294.html
Copyright © 2011-2022 走看看