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;
            }
        }
    }
    
  • 相关阅读:
    oracle 静默安装
    浅析hybrid模式下地支付宝钱包和微信
    LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解
    hdu 5411 CRB and Puzzle 矩阵高速幂
    Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
    实现Android4.4系统设置分页滑动浏览功能
    oracle 数据库中数据导出到excel
    Nginx配置upstream实现负载均衡
    公司须要内部的地图服务,准备自己去开发可是成本太高,如今有没有专门为企业提供GIS地图开发的产品呀?大概价格多少?
    图片在内存中的占用的空间大小
  • 原文地址:https://www.cnblogs.com/jingmoxukong/p/2121294.html
Copyright © 2011-2022 走看看