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;
            }
        }
    }
    
  • 相关阅读:
    eclipse的优化 gc.log
    一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
    JVM系列三:JVM参数设置、分析
    热加载
    彻底理解JAVA动态代理
    Linux下查看Web服务器当前的并发连接数和TCP连接状态
    个人博客 V0.0.3 版本 ...
    HTML5本地存储——IndexedDB(一:基本使用)
    如何在Blog中加入Google Analytics
    webpack中实现按需加载
  • 原文地址:https://www.cnblogs.com/jingmoxukong/p/2121294.html
Copyright © 2011-2022 走看看