gisempire100
捉鬼专家
捉鬼专家
  • 注册日期2004-08-13
  • 发帖数552
  • QQ
  • 铜币2462枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2060回复:1

获取一个数字的高字位值或低字位值

楼主#
更多 发布于:2008-01-19 23:56
<P>问题:</P>
<P>你有一个32位的整数,它在低16位和高16位都含有信息。你需要方法去得到它的高字位值(前16位)和/或低字位值(后16位)。</P>
<P>解决方法:</P>
<P>要得到一个整数的高字位值,像下面显示的方法一样,只要在它和一个值之间执行一个与(AND)操作就可以了:</P>
<P>       </P>
<P> public static int GetHighWord(int intValue)<BR>        {<BR>            return (intValue ; (0xFFFF << 16));<BR>        }<BR>要得到低字位值,执行下面的代码:</P>
<P>        </P>
<P>public static int GetLowWord(int intValue)<BR>        {<BR>            return (intValue ; 0x0000FFFF);<BR>        }<BR>这个方法可以简单地修改一下,以适应其他大小(比如说8位,16位,或64位)的整数类型;这个内容显示在下面的讨论小节中。</P>
<P>讨论:</P>
<P>要想确定一个数字的高字位值,使用下面的与操作符:</P>
<P><BR>        uint intValue = Int32.MaxValue;<BR>        uint MSB = intValue ; (0xFFFF << 16);<BR>        // MSB == 0xFFFF0000<BR>这个方法简单地和另一个高位都被设为1的数值进行与(AND)运算。这个方法的结果是在低位上都是0,而高位则不变。</P>
<P>要想确定一个数字的低字位值,使用下面的与操作符:</P>
<P><BR>        uint intValue = Int32.MaxValue;<BR>        uint LSB = intValue ; 0x0000FFFF;<BR>        // LSB == 0x0000FFFF </P>
<P>这个方法则是把低位的都设置为1;其结果是高位都是0,留下低位不变。</P>
<P>这里的方法只接受32位的整数。要想这个方法接受其他的数字类型,你可以简单地重载这个方法,去接受任何你想要的数字类型。比如,你想要获取一个16位数字的低或高字节,你可以使用和GetHighWord方法同样的结构:</P>
<P><BR>        public static short GetHighByte(short shortValue)<BR>        {<BR>            return (short)(shortValue ; (0xFF << 8));<BR>        }<BR>GetLowWord方法被修改为:      </P>
<P>        public static short GetLowByte(short shortValue)<BR>        {<BR>            return (short)(shortValue ; (short)0xFF);<BR>        }<BR> <BR></P>
喜欢0 评分0
A friend is never known till a man has need. ...CL
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2008-01-19 23:58
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
游客

返回顶部