发布时间:2018-09-26编辑:佚名阅读(3783)
首先看下面一段代码
byte x = 1; byte y = 2; byte z = x + y; Console.WriteLine(z);
可能很多人会说显示结果是3。
其实,这段代码无法运行,因为编译就不通过报错,错误原因:错误 1 无法将类型“int”隐式转换为“byte”。存在一个显式转换(是否缺少强制转换?)
因为,byte类型之间运算会隐式转换成int类型,然后对int类型值进行运算,得到的结果是int类型,所以直接用byte类型变量保存结果会报错。实际上short和char类型相互运算操作也做这样的处理。之所这样设计,可能byte、short和char类型相互运算操作,数值可能会发生溢出错误,所以在运算的时候直接都转换为int来运算,达到强制结果用int类型保存。
如果认为运算后结果不会溢出的情况,可以显式保存结果。
byte x = 1; byte y = 2; byte z = (byte)(x + y); Console.WriteLine(z);
再看下面这段代码:
byte z = 1 + 2; Console.WriteLine(z);
在vs上编译和运行没问题的,结果是3。
1+2是常量运算,得到的就是3,然后赋值给z。
再看下面代码:
byte b = 127; byte a = 2; b =(byte)(b + a); Console.WriteLine(b); Console.ReadLine();
在vs上编译和运行没问题的,结果是129。
127+2是常量运算,得到的就是129,然后赋值给b。
再看下面这段代码:
byte b = 255; byte a = 2; b =(byte)(b + a); Console.WriteLine(b); Console.ReadLine();
在vs上编译和运行没问题的,结果是1。
byte的取值范围是0~255所以超过就会重头开始算。
关键字: c# byte相加
2人
0人
0人
0人