你的k是不是先前定义为int,或者l的类型为int

解决方案 »

  1.   

    ???? 数字1是int(32位整数),字母k被你声明为ushort(无符号16位整数)。大部分编程语言都不允许直接从大(int)到小(ushort)转换。unshort k;k = (ushort)1;//这里编译器把int强制转换成ushort;
    k =(ushort)(k+1);//这里编译器先把k隐式的转换成int,
                     //然后再把(k+1)这个int强制转换成ushort.
      

  2.   

    int类型4个字节(32位),ushort类型2个字节(无符号16位),当int类型向ushort类型转换时有可能发生数据丢失,所以必须显示(强制)转换。
    正确操作看上贴
      

  3.   

    ushort k;k = 100;   // 此句编译器认为正确k = k + 100;  // 此句编译器认为不正确如果100这常量被编译器认为是int类型的话,
    为什么k=100 这句话不报类型不一致的错?k=k+100 表达式在运算时,为什么不将100转换为ushort类型的,
    再进行运算呢?
      

  4.   

    k=k+100 中先将第二个k隐性转换为int然后和100相加得到一个int类型的值,最后int隐性转换为ushort类型的k出错
      

  5.   

    k = 100并非是int转换为ushort,而是单纯的赋值
      

  6.   

    为什么不转换为long或ulong类型呢?
      

  7.   

    不能将int隐式转换成ushort,因为int是32位ushort是16位,所以有能从大到小隐式转换。
    只能显示转换:
    k=(ushort)l;
    k=(ushort)(k+l);
      

  8.   

    没有明确定义常量值时,系统默认为int型
      

  9.   

    这个看编译器的实现了,我也说不上理由,但不论转换为long或ulong,你在向小的数据类型转换时(ushort)都必须显示强制转换,而且还要看编译器支不支持
      

  10.   

    这是因为:k=100; 因为k是ushort类型,100和k的类型匹配,所以语句合法。k=k+100; 编译器先看右边,因为100向上转换是隐含的,向下转换必须强制,由于这里没有强制存在,编译器视k+100为Int类型,也就是说不是把100转换成ushort,而是把k转换成int了,当k+100赋值给左边的k的时候,自然就不对了。
    所以要你的语句可以work,你需要:k=1;
    k=k+(ushort)1;   或者 k=(ushort)(k+1);
      

  11.   

    ushort k;k = 1;
    k = k + 1;写为k =(short) k+1
      

  12.   

    ushort k=1;
    //Console.WriteLine (Convert.ToString(k));
    k=(ushort)(k+1);
    //Console.WriteLine (Convert.ToString(k));
      

  13.   

    To  xyh2002(许星)你还是写错了哦^_^应该为 k =(short)(k+1);再说楼主主要目的不是问语句怎么写,而是为什么想楼主那样写出错。ushort k;
    k = 1;   // 定义k为ushort,并赋值; k = k + 1; //进行运算,先把等号运算符右边的k隐式转换为int 型,再相加运算,所以得到的结果为int型,但k定义为ushort 型,所以产生溢出;