初学 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 型,所以产生溢出; StreamWriter sw = new StreamWriter(sOutputFilename))为什么总是提示有另一进程在操作 asp.net调试如何可视化存储过程 有关版权安全问题(急) TreeView 中随着焦点的变化自动滚动 日期验证 ADO.NET连接数据库问题 请教:Hashtable的foreach的顺序和Add的顺序是不一致的吗?怎样使用他们同步呢? 请问这个界面的控件是用什么做的?(C#) 有个地方不懂 求C# 操作Excel操作资料 程序做好了,做安装程序遇到的问题? 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 型,所以产生溢出;