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);
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);
你的比较是按位与吗?
int 带符号的32位整形
uint 不带符号的32位整形
只有用long
2.
按位异或
判断结果是否为0
or
(int)(ERROR_RAS_USER_DENY-4294967296)
是按位进行比较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进制的方式赋值,为什么系统不能直接理解成负数呢?