首页 新闻 会员 周边

c#复合赋值运算符

0
悬赏园豆:200 [已解决问题] 解决于 2016-01-06 15:02

最近在学java,突然发现一个细节。short y = 1;y += 1; 这两行代码无论在java 还是c#中都可以编译通过,相同的 short y = 1;y =y+ 1;都不能编译通过,原因是 int 不能隐式转化为short,

但是 int i = 1;i *=0.1; 这两行代码在java是完全可以编译通过,在c#中确实不行,请大神们,解答。。。

西海岸的主页 西海岸 | 初学一级 | 园豆:22
提问于:2016-01-06 13:31
< >
分享
最佳答案
0

问了同事,java中复制运算是会自动截取数据,超出范围的会被截取掉,c#中编译器是检查数据的范围,不符合类型范围的编译错误,不做截取。。

西海岸 | 初学一级 |园豆:22 | 2016-01-06 14:57
其他回答(4)
0

你把double转成int当然编译不通过

收获园豆:100
MrNice | 园豆:3450 (老鸟四级) | 2016-01-06 13:55

short y = 1;y += 1 为什么 int可以转化为short呢? 高精度也不能隐式转化为低精度啊

支持(0) 反对(0) 西海岸 | 园豆:22 (初学一级) | 2016-01-06 14:15
0

0.1 是 double 類型;

i*0.1 的結果也是 double 類型;

而 i 是 int,double 不能隐式转化为int;

收获园豆:100
明Lam | 园豆:615 (小虾三级) | 2016-01-06 14:06
0

都没没说到点子上.

short和int都是整形,机内存储格式是一样的.只是长度不一样.所以可以安全截断

double是浮点型,机内格式和整数是2个概念.所以不能安全截断,一定会出现精度丢失.

至于为什么java允许这样做.说明java是个不严谨的语言..

百度下 整数和浮点数的机内表示.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-01-11 17:52
0

int 是单精度 double和short 是双精度。在内存中int是4个字节而double和short是8个字节。。通俗的话说你一个大的箱子去装小的箱子可以装进去。但是你一个小的箱子可以去装大的箱子吗。。

只需要一个眼神 | 园豆:25 (初学一级) | 2016-01-13 14:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册