标签: c# unchecked-conversion
当我尝试以下内容时:
const int x = 1000; byte b1 = (byte)x; //Or byte b2 = (byte)1000;
编译器声称它没有将常量1000转换为b1或b2。
但是当我尝试以下内容时:
const int x = 1000; byte b1 = unchecked((byte)x); //Or byte b2 = unchecked((byte)1000);
这段代码很好。为什么?
答案 0 :(得分:3)
是的,因为在.NET Framework中,byte表示8位无符号整数,它可以保存从0到255的值。
byte
0
255
但是当我尝试以下内容时......这段代码运行正常。为什么?
当您使用unchecked关键字时,您允许溢出未标记。
unchecked
如果删除未经检查的环境,则会发生编译错误。 可以在编译时检测溢出,因为所有条款 表达式是常量。
答案 1 :(得分:3)
很明显。
byte的范围是0-255。你试图把那1000个导致溢出。 unchecked允许它,因为
unchecked关键字用于抑制整数类算术运算和转换的溢出检查。