请问个关于check的问题~~

littlecc2009 2010-09-05 05:26:41
check可以控制检测溢出,而原理就是在IL中分别使用add.ovf subtract.ovf multiply.ovf conv.ovf
代替默认的
add subtract multiply conv
那么我想请问:
byte b=100;
b=(Byte)checked(b+200)为什么不报错呢

b+200中的+不是add.ovf吗?既然有溢出检测,为什么相加后不报错呢??
请指教!~谢谢~~~~!!
...全文
81 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlecc2009 2010-09-05
  • 打赏
  • 举报
回复
我还想请问下~~~(1.0/2).GetType() ->Double这个,是不是先把INT32的"2"转换为DOUBLE再相除呢??
还有有什么方法可以看到这些转换过程吗??

请指教!~谢谢~~~

littlecc2009 2010-09-05
  • 打赏
  • 举报
回复
好的~谢谢两位~~~等下回来结贴~~
wuyq11 2010-09-05
  • 打赏
  • 举报
回复
存在从 byte 到int的预定义隐式转换。
byte x = 10, y = 20;
byte z = (byte)(x + y);
强制转换
兔子-顾问 2010-09-05
  • 打赏
  • 举报
回复
跟类型有关的。
并不是+-*/都是int32类型,和调用的有关
(1/2).GetType() -> Int32
(1.0/2).GetType() ->Double
兔子-顾问 2010-09-05
  • 打赏
  • 举报
回复
当然不是了
你有兴趣可以自己试试
(1+2).GetType()
(1-2).GetType()
(1*2).GetType()
(1/2).GetType()

littlecc2009 2010-09-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
+操作符返回值是int32
b是byte
b+200就是int32了
[/Quote]
噢~~~~那加减乘除都是int32吗??
wuyq11 2010-09-05
  • 打赏
  • 举报
回复
对数值类型进行一元 + 运算的结果就是操作数的值。
对于数值类型,+ 计算两个操作数之和
int a = int.MinValue;
int c = checked(a--);
兔子-顾问 2010-09-05
  • 打赏
  • 举报
回复
byte b=100;
b=(Byte)checked(b+200)
首先b+200,返回300(Int32类型的),
十六进制表示为:
012C
然后强制类型转换为byte,则摄取高字节结果为
2C,也就是44
兔子-顾问 2010-09-05
  • 打赏
  • 举报
回复
+操作符返回值是int32
b是byte
b+200就是int32了

110,536

社区成员

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

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

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