zoukankan      html  css  js  c++  java
  • 【C#食谱】【风味小吃】菜单6:获取一个数字的高字位值或低字位值

    问题

    你有一个32位的整数,它在低16位和高16位都含有信息。你需要方法去得到它的高字位值(前16位)和/或低字位值(后16位)。

    解决方法

    要得到一个整数的高字位值,像下面显示的方法一样,只要在它和一个值之间执行一个与(AND)操作就可以了:

           
     public static int GetHighWord(int intValue)
            
    {
                
    return (intValue & (0xFFFF << 16));
            }

    要得到低字位值,执行下面的代码:

            
    public static int GetLowWord(int intValue)
            
    {
                
    return (intValue & 0x0000FFFF);
            }

    这个方法可以简单地修改一下,以适应其他大小(比如说8位,16位,或64位)的整数类型;这个内容显示在下面的讨论小节中。

    讨论

    要想确定一个数字的高字位值,使用下面的与操作符:


            uint intValue = Int32.MaxValue;
            
    uint MSB = intValue & (0xFFFF << 16);
            
    // MSB == 0xFFFF0000

    这个方法简单地和另一个高位都被设为1的数值进行与(AND)运算。这个方法的结果是在低位上都是0,而高位则不变。

    要想确定一个数字的低字位值,使用下面的与操作符:


            uint intValue = Int32.MaxValue;
            
    uint LSB = intValue & 0x0000FFFF;
            
    // LSB == 0x0000FFFF

    这个方法则是把低位的都设置为1;其结果是高位都是0,留下低位不变。

    这里的方法只接受32位的整数。要想这个方法接受其他的数字类型,你可以简单地重载这个方法,去接受任何你想要的数字类型。比如,你想要获取一个16位数字的低或高字节,你可以使用和GetHighWord方法同样的结构:


            public static short GetHighByte(short shortValue)
            
    {
                
    return (short)(shortValue & (0xFF << 8));
            }
    GetLowWord方法被修改为:      

            public static short GetLowByte(short shortValue)
            
    {
                
    return (short)(shortValue & (short)0xFF);
            }

     

    汇聚杭州外卖:外卖汇
  • 相关阅读:
    算法详解(LCA&RMQ&tarjan)补坑啦!完结撒花(。◕ˇ∀ˇ◕)
    借教室(NOIP2012)
    同余方程(NOIP2012)
    开车旅行(NOIP2012)
    剑指offer-int类型负数补码中1的个数-位操作
    直接插入排序的再再改进
    剑指offer-特定二维数组中查找一个元素是否存在-二分搜索-二维数组
    递归的再一次理解-斐波那契数列
    剑指offer-顺时针打印矩阵-二维数组
    剑指offer-第一个只出现一次的字符-字符串和数组
  • 原文地址:https://www.cnblogs.com/adaiye/p/1045116.html
Copyright © 2011-2022 走看看