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);
...全文
1645 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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的时候,就当成负数。这样就好了。

110,477

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧