应该是byte类型的不能执行加法,先转化为int类型的,然后才执行加法。

解决方案 »

  1.   

    object o;
    short s=1;
    o=s+s;
    Console.WriteLine(o.GetType() );
    short也不能进行加法吗?
      

  2.   

                       object o;
     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)。
      

  3.   

    我想问的是为什么不是:byte+byte=byte?
    为什么编译器这么“多事”?
      

  4.   

    怎么可能byte+byte还等于byte呢。
    2个byte型的数据加到一起用byte型的变量怎么装?
      

  5.   

    pp616(平平):
    这是道理吗?那为什么int+int=int??
      

  6.   

    问这种问题就不要再学C#了,学QBasic算了。
      

  7.   

    回复人:fa2002(叮当) (2001-11-21 19:36:57)  得0分 
    pcadmin(兽男)说话好不要face啊!真是太狂了,比傻B都狂。说他牛B不过分吧。 to fa2002(叮当):说话小心点,你自己说话更狂妄自大,这很令人讨厌,如果你有真本事就把问题回答了,我会很感谢你;不然请别再来这儿了。这里是讨论技术的,不是给你出气或者乱说话的。
      

  8.   

      因为CLR的运算堆栈只能处理32位及以上的整型数值运算,所以在压栈的同时小于32位的整数会符号/无符号扩展成32位,所以运算结果也就只能是Int32了。
      当然,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的话,这句已经可以完成转换了。
      

  9.   

    不知道你有没有看过C#的随机文档,下面是我从中摘录的一段,你看后什么都明白了
    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
    以后多交流。
      

  10.   

    对于表达式如:
    byte z=x+y 
    是在运行时刻才确定起具体的值
    所以在编译时,编译器并不知道是否会造成溢出,会报错。