none
& 运算,我不清楚?求专家和大师。 RRS feed

  • 问题

  • private ushort usDataOffsetAndFlags=555;

    int nFlags = usDataOffsetAndFlags & 0x3F;

    我不理解这里,为什么一个无符号短整型能和一个16位的数&运算,运算的结果又为什么能被一个整型引用呢?

    2010年11月1日 15:35

答案

  • dear
    位元运算,计算机上的资料原本就是0,1二进位组合而成,所以当使用位元运算时就是进行0,1运算
    http://msdn.microsoft.com/zh-cn/library/sbf85k1c%28VS.80%29.aspx
    秘訣無它,唯勤而已
    • 已标记为答案 王基任 2010年11月1日 16:58
    2010年11月1日 16:55
  • 位与,或,非,以及异或运算 (&, |, !, ~) 的两个操作数必须是 int32,或者可以转换成 int32 的兼容类型,如 byte, sbyte, short, ushort, int, uint, long, ulong, char 等。其返回值是 int32。也就是说,上面的代码进行按位与操作,ushort 先被转换成 int32,然后再进行 & 操作。

    楼上的回答好像与楼主的问题无关。


    Mark Zhou
    • 已标记为答案 王基任 2010年11月4日 18:43
    2010年11月2日 9:06

全部回复

  • dear
    位元运算,计算机上的资料原本就是0,1二进位组合而成,所以当使用位元运算时就是进行0,1运算
    http://msdn.microsoft.com/zh-cn/library/sbf85k1c%28VS.80%29.aspx
    秘訣無它,唯勤而已
    • 已标记为答案 王基任 2010年11月1日 16:58
    2010年11月1日 16:55
  • 位与,或,非,以及异或运算 (&, |, !, ~) 的两个操作数必须是 int32,或者可以转换成 int32 的兼容类型,如 byte, sbyte, short, ushort, int, uint, long, ulong, char 等。其返回值是 int32。也就是说,上面的代码进行按位与操作,ushort 先被转换成 int32,然后再进行 & 操作。

    楼上的回答好像与楼主的问题无关。


    Mark Zhou
    • 已标记为答案 王基任 2010年11月4日 18:43
    2010年11月2日 9:06
  • 位与,或,非,以及异或运算 (&, |, !, ~) 的两个操作数必须是 int32,或者可以转换成 int32 的兼容类型,如 byte, sbyte, short, ushort, int, uint, long, ulong, char 等。其返回值是 int32。也就是说,上面的代码进行按位与操作,ushort 先被转换成 int32,然后再进行 & 操作。

    楼上的回答好像与楼主的问题无关。


    Mark Zhou


    DEAR

    小弟受教了,

    1.位元运算不就是应该是2进制(Binary )运算吗?

    2.所以位元运算&, |, ~, ^, <<, >>,应该要先转成int后再转成Binary ,才能进行运算吧?

    3.有无相关资料参考得知内部转型动作?


    秘訣無它,唯勤而已
    2010年11月2日 11:06