在C#中,选中和未选中是如何进行转换的

本文关键字:何进行 转换 | 更新日期: 2023-09-27 18:26:27

我的问题是关于C#控制台编程中的这段代码,我举了一个例子:

这个代码是不可能的:

byte sum = (byte)(150 + 150); //impossible

但这个代码是可能的:

byte sum = unchecked((byte)(150 + 150)); //possible

我的问题是:unchecked是如何工作的?我的意思是UNCHECKED是如何使这个代码成为可能的?

在C#中,选中和未选中是如何进行转换的

所有未检查意味着,如果值溢出(越过MaxValueMinValue边界),则不会引发错误,并且允许进行环绕。

byte.MaxValue255150 + 150300。通过允许溢出,它越过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的使用使得它在编译时可用。