byte类型特殊的地方

最近在程序中用到了byte,发现了一些很奇怪的地方。

问题一:直接把Int类型的1赋值给byte,没有报错,但是定义一个int类型,然后再次赋给byte就会报错,说不能隐式转换

image

问题二:明明是byte型的加byte型的,最后赋值给byte型,它竟然报错,说是不能把int转换成byte,int从哪来?

image

问题三:b+=b2不是相当于b=b+b2吗?为什么一个有错误,而另外一个没有错误?

image

最后经过一番研究,并且在网上找了一些资料,才发现,原来是C#编译器是byte类型进行了特殊处理。

特殊处理一:默认可以把int类型的数字直接赋给byte类型,如果没超出byte类型的大小,则不报错,如果超过了byte类型的大小,则报错。如byte b=300; 编译的时候就会报错。如果定义了一个int类型,它的值在byte类型的范围之内,也不能直接给byte赋值。只支持常量int值赋值。

image

特殊处理二:对byte(sbyte,short也是这样)的运算,都会把它们转换成uint类型,可能的原因是byte类型进行运算容易溢出。所以byte类型的数进行运算后,其结果是int类型,还需要显示转换成byte类型。

特殊处理三:对于byte类型来说,b+=b2跟b=b+b2是不同的,b+=b2相当于b=(byte)(b+b2),也就是相当于进行了一次显式的转换。

还有一点需要注意,在强制转换的时候,如果超过了目标类型的大小,运行时就会报错。

原文地址:https://www.cnblogs.com/xiaoxiangfeizi/p/2979730.html