在C#中,选中和未选中是如何进行转换的
本文关键字:何进行 转换 | 更新日期: 2023-09-27 18:26:27
我的问题是关于C#控制台编程中的这段代码,我举了一个例子:
这个代码是不可能的:
byte sum = (byte)(150 + 150); //impossible
但这个代码是可能的:
byte sum = unchecked((byte)(150 + 150)); //possible
我的问题是:unchecked
是如何工作的?我的意思是UNCHECKED
是如何使这个代码成为可能的?
所有未检查意味着,如果值溢出(越过MaxValue
或MinValue
边界),则不会引发错误,并且允许进行环绕。
byte.MaxValue
是255
,150 + 150
是300
。通过允许溢出,它越过255
边界,并从byte.MinValue
(在这种情况下为0
)开始再次计数,以达到44
((150 + 150) - 256 = 44
)的最终值
在编译时可以检测到溢出,因为表达式是常量。
如果你用代替它
int i = 150;
byte sum = (byte)(i + i);
它会编译得很好
如果使用unchecked,则表示您是suppressing overflow-checking
。
即使这样也不会编译-
const int i = 150;
byte sum = (byte)(i + i);
因为CCD_ 15 keyowrd的使用使得它在编译时可用。