【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);
        }

 

汇聚杭州外卖:外卖汇
posted @ 2008-01-19 08:36 随风逝去(叶进) 阅读(1576) 评论(7)  编辑 收藏 所属分类: A. C#.NETB. 个人翻译

  回复  引用    
#1楼 2008-01-19 09:08 | 喝小酒的网摘 [未注册用户]
沙发,哈哈
  回复  引用  查看    
#2楼 2008-01-19 10:41 | carysun      
博主用的不是ie的浏览器吧
你的blog在ie下有问题
  回复  引用  查看    
#3楼 [楼主]2008-01-19 10:50 | 随风逝去      
我在IE7下显示正常!!
  回复  引用    
#4楼 2008-01-19 11:44 | JoeLee [未注册用户]
HOHO.VC里就有这个宏的.
觉得左移16位,再移回来就行了.没试过.
  回复  引用  查看    
#5楼 2008-01-19 13:28 | cslar      
这不是您的原创吧?
  回复  引用  查看    
#6楼 2008-01-21 15:54 | hoodlum1980      
就是,这是新手区的文章吧,有点让人哭笑不得,vc这个宏,用于取消息中的参数的高半部分和低半部分。位于"windef.h"

#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff))
#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
  回复  引用  查看    
#7楼 2008-01-23 14:29 | 阿牛 - 专注OOP      
good

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接:
 
Free Web Counter
Free Web Counter