1)我定义了一个常量
public const uint ERROR_RAS_USER_DENY = 0x80040304;
如果我想吧uint改成int,系统就提示类型转换错误。我应该怎么为int定义大(负)数据的2)另外如果我希望比较一个int和uint,只比较他们的bit位数据,而不是数据值比较。也就是是说
int i = 0x80040098;
int u = 0x80040098;
我希望比较的结果相等。应该用什么函数进行比较
我之前都使用一个中间变量来转换uint数据,但比较麻烦,请问有什么更好的方法吗?
int iOpt = Int32.Parse(uOpt.ToString("x"), System.Globalization.NumberStyles.AllowHexSpecifier);

解决方案 »

  1.   

    就是,用long、ulong。
    你的比较是按位与吗?
      

  2.   

    1.
    int 带符号的32位整形
    uint 不带符号的32位整形
    只有用long
    2.
    按位异或
    判断结果是否为0
      

  3.   

    1、(int)(ERROR_RAS_USER_DENY-0xffffffff)
      

  4.   

    (int)(ERROR_RAS_USER_DENY-0x100000000)
    or
    (int)(ERROR_RAS_USER_DENY-4294967296)
      

  5.   

    运算符“^”无法应用于“long”和“bool”类型的操作数
      

  6.   

    to diffmaker:
    是按位进行比较to Ivony:
    thanks, unchecked可以达到我的目的。to hdt:
    直接转换的话,原本位相同的两个数据,结构就不同了
    int i = -1;
    uint u = 0xffffffff;
    long li = i;
    long lu = u;
    if (li == lu)
    {
    Console.WriteLine("OK");
    }
    to viena:
    你的方法也可以,(int)(u-0x100000000)我觉得第二个问题,用Ivony的方法比较简单。我第一个问题,有没有好的办法?
    我的目的只是用16进制的方式赋值,为什么系统不能直接理解成负数呢?
      

  7.   

    呵呵,我倒是觉得0x80000004这样的数据,赋值给uint的时候,就当成正值,赋值给int的时候,就当成负数。这样就好了。
      

  8.   

    我的目的只是用16进制的方式赋值,为什么系统不能直接理解成负数呢?毕竟C#设计的时候就不想让程序员了解位、储存方式等等乱七八糟的东西的。但他还是保留了位运算符和诸如unchecked这样的东西。