应该是byte类型的不能执行加法,先转化为int类型的,然后才执行加法。
解决方案 »
- 当初没选择MFC实在是个错误(关于窗口子类化的技术问题)
- 系统客户端的dll太多,求客户端自动更新的好方案
- 用过Nhibernate的大神进来, 关于Nhibernate如何处理分表数据
- 怎样访问settings.settings文件中的应用程序配置信息?
- .net 程序集的文件大小最大能多大?它拥有的类的个数最多为多少个?在vs 200x里开发类库模块,最多可以有多少个cs文件?
- ASP。NET 怎么控制权限啊
- C#连接远程数据库,在数据提交时,网络断开,程序出错自动关闭,怎么解决?谢谢!!!
- 两条c#语句就能解决的字符串小操作,大家都来试试.
- 关于DataGrid的问题
- C#中日期类如何实现
- 如何使用CSC.EXE?
- 请教filesystemwatcher组件的使用方法
short s=1;
o=s+s;
Console.WriteLine(o.GetType() );
short也不能进行加法吗?
byte b=1;
//o=b+b; 编译器进行了隐含的box -〉System.Int32
o=(byte)(b+b); //使用显式转换
Console.WriteLine(o.GetType() ); //输出应为System.Byte微软亚洲技术中心 VC技术支持本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款 (http://www.csdn.net/microsoft/terms.shtm)。
为什么编译器这么“多事”?
2个byte型的数据加到一起用byte型的变量怎么装?
这是道理吗?那为什么int+int=int??
pcadmin(兽男)说话好不要face啊!真是太狂了,比傻B都狂。说他牛B不过分吧。 to fa2002(叮当):说话小心点,你自己说话更狂妄自大,这很令人讨厌,如果你有真本事就把问题回答了,我会很感谢你;不然请别再来这儿了。这里是讨论技术的,不是给你出气或者乱说话的。
当然,C#本来不是一定要强制使用类型转换的,因为与压栈(ld)相对的退栈(st)指令可以隐式将Int32截取成小于32位的整数类型(比如byte)。
对byte a, b; ...; c = (byte)(a+b);,C#生成的指令:
ldloc.0
ldloc.1 //堆栈上已经是两个Int32了。
add
conv.u1 //转换成byte. 其实没有必要,删除后程序一样正确
stloc.2 //如果local变量2类型是byte的话,这句已经可以完成转换了。
You cannot implicitly convert nonliteral numeric types of larger storage size to byte (see Integral Types Table for the storage sizes of integral types). Consider, for example, the following two byte variables x and y:byte x = 10, y = 20;
The following assignment statement will produce a compilation error, because the arithmetic expression on the right-hand side of the assignment operator evaluates to int by default.byte z = x + y; // Error: conversion from int to byte
To fix this problem, use a cast:byte z = (byte)(x + y); // OK: explicit conversion
以后多交流。
byte z=x+y
是在运行时刻才确定起具体的值
所以在编译时,编译器并不知道是否会造成溢出,会报错。