初学 C#,觉得很奇怪的问题 你的k是不是先前定义为int,或者l的类型为int 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ???? 数字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. int类型4个字节(32位),ushort类型2个字节(无符号16位),当int类型向ushort类型转换时有可能发生数据丢失,所以必须显示(强制)转换。正确操作看上贴 ushort k;k = 100; // 此句编译器认为正确k = k + 100; // 此句编译器认为不正确如果100这常量被编译器认为是int类型的话,为什么k=100 这句话不报类型不一致的错?k=k+100 表达式在运算时,为什么不将100转换为ushort类型的,再进行运算呢? k=k+100 中先将第二个k隐性转换为int然后和100相加得到一个int类型的值,最后int隐性转换为ushort类型的k出错 k = 100并非是int转换为ushort,而是单纯的赋值 为什么不转换为long或ulong类型呢? 不能将int隐式转换成ushort,因为int是32位ushort是16位,所以有能从大到小隐式转换。只能显示转换:k=(ushort)l;k=(ushort)(k+l); 没有明确定义常量值时,系统默认为int型 这个看编译器的实现了,我也说不上理由,但不论转换为long或ulong,你在向小的数据类型转换时(ushort)都必须显示强制转换,而且还要看编译器支不支持 这是因为: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); ushort k;k = 1;k = k + 1;写为k =(short) k+1 ushort k=1; //Console.WriteLine (Convert.ToString(k)); k=(ushort)(k+1); //Console.WriteLine (Convert.ToString(k)); To xyh2002(许星)你还是写错了哦^_^应该为 k =(short)(k+1);再说楼主主要目的不是问语句怎么写,而是为什么想楼主那样写出错。ushort k;k = 1; // 定义k为ushort,并赋值; k = k + 1; //进行运算,先把等号运算符右边的k隐式转换为int 型,再相加运算,所以得到的结果为int型,但k定义为ushort 型,所以产生溢出; 使用PrintSystemJobInfo类 如何实时判断打印完成 这样的代码有化简方法不 如何实现类似于VS里面的属性窗口 在vs2003的Datalist中怎样跟据从数据库中取出来的值决定是否显示某一行 asp.net2.0 gridview 绑定数据如何才能自定义字符串? 紧急求助!关于C#窗体程序中combox的设置问题 tjq_tang(重新开始) 请进 请问.net环境中如何支持多个数据库分布式事务处理 由多少人在用C# 简单问题 程序做好了,做安装程序遇到的问题? dll问题。
k =(ushort)(k+1);//这里编译器先把k隐式的转换成int,
//然后再把(k+1)这个int强制转换成ushort.
正确操作看上贴
为什么k=100 这句话不报类型不一致的错?k=k+100 表达式在运算时,为什么不将100转换为ushort类型的,
再进行运算呢?
只能显示转换:
k=(ushort)l;
k=(ushort)(k+l);
所以要你的语句可以work,你需要:k=1;
k=k+(ushort)1; 或者 k=(ushort)(k+1);
k = k + 1;写为k =(short) k+1
//Console.WriteLine (Convert.ToString(k));
k=(ushort)(k+1);
//Console.WriteLine (Convert.ToString(k));
k = 1; // 定义k为ushort,并赋值; k = k + 1; //进行运算,先把等号运算符右边的k隐式转换为int 型,再相加运算,所以得到的结果为int型,但k定义为ushort 型,所以产生溢出;