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;

        }

    }

}

你可能感兴趣的:(Opera)