关于byte类型的运算问题(适合新手阅读)
2012-01-19 11:08
603 查看
可能很多人都没有注意到,C#中对byte类型的处理还是很特殊的。
下面我用几行简单的代码来说明问题
byte x=1;
byte y=2;
byte z=x+y; //error:无法将int类型转换为byte类型
可能很多人会认为这段代码没有问题,实际上第三行会产生编译错误:无法将int类型转换为byte类型!
这是为什么呢?因为C#编译器会认为byte类型和byte类型运算的结果是int型,实际上对short类型也做了相似的处理。至于为什么这样设计,我的看法是byte或short类型相互运算比较容易发生溢出,所以在运算的时候直接都转换为int来运算了。
再看下面的代码
byte i=1; //OK
这里的字面值1是被编译器识别为int类型的,在以上声明中,整数1从int类型隐式转换为byte类型。如果整数超出了byte类型的范围,则将发生编译错误。
上面是MSDN中的说法,实际上这个隐式转换违背了范围小的类型可以隐式转换为范围大的类型这条规则,但是在C#中这个转换的确是合法的。
注意这个转换只有赋值运算的时候才成立,像这样就不可以了:
int x=1;
byte i=x; //error: 无法将int类型转换为byte类型
在看下面的代码:
byte i=1;
i+=1; //OK
这行代码是可以通过的,原因是C#中x+=y并不是总相当于x=x+y的!
如果x+y的结果的类型可以隐式转换为x的类型,那么x+=y相当于x=x+y
如果x+y的结果的类型可以显式转换为x的类型,并且x=y也合法,那么x+=y相当于x=(T)(x+y),其中T是x的类型。
就像上面这行代码,i+1是int类型的,可以显式转换为byte类型,而i=1也合法,所以i+=1就相当于i=(byte)(i+1)
i=i+1; //error:无法将int类型转换为byte类型
这行比较容易理解,1被编译器识别为int类型,所以i+1的结果是int类型的,无法将int类型转换为byte类型
下面我用几行简单的代码来说明问题
byte x=1;
byte y=2;
byte z=x+y; //error:无法将int类型转换为byte类型
可能很多人会认为这段代码没有问题,实际上第三行会产生编译错误:无法将int类型转换为byte类型!
这是为什么呢?因为C#编译器会认为byte类型和byte类型运算的结果是int型,实际上对short类型也做了相似的处理。至于为什么这样设计,我的看法是byte或short类型相互运算比较容易发生溢出,所以在运算的时候直接都转换为int来运算了。
再看下面的代码
byte i=1; //OK
这里的字面值1是被编译器识别为int类型的,在以上声明中,整数1从int类型隐式转换为byte类型。如果整数超出了byte类型的范围,则将发生编译错误。
上面是MSDN中的说法,实际上这个隐式转换违背了范围小的类型可以隐式转换为范围大的类型这条规则,但是在C#中这个转换的确是合法的。
注意这个转换只有赋值运算的时候才成立,像这样就不可以了:
int x=1;
byte i=x; //error: 无法将int类型转换为byte类型
在看下面的代码:
byte i=1;
i+=1; //OK
这行代码是可以通过的,原因是C#中x+=y并不是总相当于x=x+y的!
如果x+y的结果的类型可以隐式转换为x的类型,那么x+=y相当于x=x+y
如果x+y的结果的类型可以显式转换为x的类型,并且x=y也合法,那么x+=y相当于x=(T)(x+y),其中T是x的类型。
就像上面这行代码,i+1是int类型的,可以显式转换为byte类型,而i=1也合法,所以i+=1就相当于i=(byte)(i+1)
i=i+1; //error:无法将int类型转换为byte类型
这行比较容易理解,1被编译器识别为int类型,所以i+1的结果是int类型的,无法将int类型转换为byte类型
相关文章推荐
- 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目)
- 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) [c#]
- 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) [c#]
- 关于BigDecimal类型在jsp页面中进行除法运算问题
- Java中Byte类型数据在运算中的问题
- 关于java中Double类型的运算精度问题
- 两个byte变量在参与运算时的类型提升问题
- 关于java中Double类型的运算精度问题
- 在Java中byte类型数据在运算的问题
- 关于BigDecimal类型在jsp页面中进行除法运算问题
- 在Java中byte类型数据在运算的问题
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题(转)
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题
- 关于代码阅读问题的小技巧 脚本之家原创(适合所有网站)不定时更新
- 关于java中Double类型运算精度问题
- 关于C++多种数据类型四则运算的精度问题