int 和uint数据类型的赋值和比较

turnmissile 2006-07-18 09:50:23
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);
...全文
908 点赞 收藏 14
写回复
14 条回复
Ivony 2006年07月25日
我的目的只是用16进制的方式赋值,为什么系统不能直接理解成负数呢?

毕竟C#设计的时候就不想让程序员了解位、储存方式等等乱七八糟的东西的。但他还是保留了位运算符和诸如unchecked这样的东西。
回复 点赞
viena 2006年07月18日
//为什么系统不能直接理解成负数呢?
直接理解成负数,不附和正常的思维逻辑
回复 点赞
turnmissile 2006年07月18日
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进制的方式赋值,为什么系统不能直接理解成负数呢?
回复 点赞
viena 2006年07月18日
晕,楼上弄个bool类型做啥?
回复 点赞
diffmaker 2006年07月18日
运算符“^”无法应用于“long”和“bool”类型的操作数
回复 点赞
viena 2006年07月18日
(int)(ERROR_RAS_USER_DENY-0x100000000)
or
(int)(ERROR_RAS_USER_DENY-4294967296)
回复 点赞
viena 2006年07月18日
1、

(int)(ERROR_RAS_USER_DENY-0xffffffff)
回复 点赞
真相重于对错 2006年07月18日
1.
int 带符号的32位整形
uint 不带符号的32位整形
只有用long
2.
按位异或
判断结果是否为0
回复 点赞
viena 2006年07月18日
位比较可以用异或^,所有二进制位相同,结果为0
回复 点赞
Ivony 2006年07月18日
1、unchecked( )
回复 点赞
diffmaker 2006年07月18日
就是,用long、ulong。
你的比较是按位与吗?
回复 点赞
viena 2006年07月18日
0x80040304超出了int的范围
回复 点赞
jijl2001 2006年07月18日
long 试试

回复 点赞
turnmissile 2006年07月18日
呵呵,我倒是觉得0x80000004这样的数据,赋值给uint的时候,就当成正值,赋值给int的时候,就当成负数。这样就好了。
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告