社区
C#
帖子详情
一个很简单的迷惑
zhaowentao_bc
2012-04-19 09:36:22
short s1=1;
s1=s1+1; //错误 1 无法将类型“int”隐式转换为“short”。存在一个显式转换(是否缺少强制转换?)
s1+=1; //运行通过
为什么会这样呢?有什么区别?
...全文
174
14
打赏
收藏
一个很简单的迷惑
short s1=1; s1=s1+1; //错误1无法将类型“int”隐式转换为“short”。存在一个显式转换(是否缺少强制转换?) s1+=1; //运行通过 为什么会这样呢?有什么区别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
E次奥
2012-04-20
打赏
举报
回复
s1+=1 是自增,自增会自动转换类型的。
s1=s1+1;是加法运算,不会自动转换为int类型,所以就错了。
深海蓝山的博客
2012-04-20
打赏
举报
回复
当然,如果所加的整数很大如s1 = (short)(s1 + 9999999999999999),数据会溢出,s1结果为0
深海蓝山的博客
2012-04-20
打赏
举报
回复
表达式(s1 += 1)是复合赋值表达式,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换
s1+=1等效于 s1=(short)(s1+1),所以不会报错
极地_雪狼
2012-04-20
打赏
举报
回复
顶啊。这么好的回答。
cnwin
2012-04-20
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
s1=s1+1;错误的原因,更准确的说s1+1不会有错,int和Int16相加之前,c#会把s1转化为int,也就是(int)S1+1,然后s1+1显然是int类型,把int类型赋值给S1类型就不匹配了,这才是真正错误的原因,
提示是:无法将类型“int”隐式转换为“short”
这说明因为int无法转化为short导致的错误,而正好是=赋值运算的时候需要把int转成short,因为……
[/Quote]
嗯,解释得很好。
orochiheart
2012-04-20
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
s1=s1+1;错误的原因,更准确的说s1+1不会有错,int和Int16相加之前,c#会把s1转化为int,也就是(int)S1+1,然后s1+1显然是int类型,把int类型赋值给S1类型就不匹配了,这才是真正错误的原因,
提示是:无法将类型“int”隐式转换为“short”
这说明因为int无法转化为short导致的错误,而正好是=赋值运算的时候需要把int转成short,因为……
[/Quote]
学习了! 我之前的理解是错误的 楼主参考这个 呵呵。。是在=的时候抱的错 而不是=右侧
orochiheart
2012-04-20
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
s1=s1+1;错误的原因,更准确的说s1+1不会有错,int和Int16相加之前,c#会把s1转化为int,也就是(int)S1+1,然后s1+1显然是int类型,把int类型赋值给S1类型就不匹配了,这才是真正错误的原因,
提示是:无法将类型“int”隐式转换为“short”
这说明因为int无法转化为short导致的错误,而正好是=赋值运算的时候需要把int转成short,因为……
[/Quote]
V5
色拉油
2012-04-20
打赏
举报
回复
霸气[Quote=引用 4 楼 的回复:]
s1=s1+1;错误的原因,更准确的说s1+1不会有错,int和Int16相加之前,c#会把s1转化为int,也就是(int)S1+1,然后s1+1显然是int类型,把int类型赋值给S1类型就不匹配了,这才是真正错误的原因,
提示是:无法将类型“int”隐式转换为“short”
这说明因为int无法转化为short导致的错误,而正好是=赋值运算的时候需要把int转成short,因为……
[/Quote]
stonespace
2012-04-20
打赏
举报
回复
s1=s1+1;错误的原因,更准确的说s1+1不会有错,int和Int16相加之前,c#会把s1转化为int,也就是(int)S1+1,然后s1+1显然是int类型,把int类型赋值给S1类型就不匹配了,这才是真正错误的原因,
提示是:无法将类型“int”隐式转换为“short”
这说明因为int无法转化为short导致的错误,而正好是=赋值运算的时候需要把int转成short,因为s1+1是int类型,
如果在s1+1的时候出错,应该提示的是无法将类型short转换为int,因为两个整数类型不匹配的时候,会把位数少的类型转化为位数多的类型,这样才不会有溢出,
stonespace
2012-04-20
打赏
举报
回复
s1+=1;正确的原因是Int16.operator+=运算符有一个版本可以接受int参数,
crystal_lz
2012-04-20
打赏
举报
回复
同意楼上、、
不过 我也是个人理解、、、
GundamG
2012-04-20
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
s1=s1+1;错误的原因,更准确的说s1+1不会有错,int和Int16相加之前,c#会把s1转化为int,也就是(int)S1+1,然后s1+1显然是int类型,把int类型赋值给S1类型就不匹配了,这才是真正错误的原因,
提示是:无法将类型“int”隐式转换为“short”
这说明因为int无法转化为short导致的错误,而正好是=赋值运算的时候需要把int转成short,因为……
[/Quote]
学习了。
orochiheart
2012-04-19
打赏
举报
回复
哈哈 好问题 我个人的理解 s1=s1+1; 报错是因为1是int类型 所以和short相加的话自然是需要转换成同一类型的,
至于 s1+=1; 这种写法会自动进行隐式转吧 (自动将1转化成了short)应该是C#语言的一种约定 或者是编译器?
python
简单
程序-写
一个
简单
程序
You are the light of the world. A city located on a hill cannot be hidden. People do not light a lamp and put it under a basket but on a lampstand, and it gives light to all in the house. In te same w...
简单
的制作
一个
钓鱼网页!
网络钓鱼,
一个
价值很高的词语!如果你曾读过我的一篇文章《价值30亿美元的资料被窃取,网络钓鱼到底有多可怕!》就会知道,网络钓鱼到底有多"值钱"! 如果对网络钓鱼这个词进行解释的话,简而言之,其就是一种黑客手段,或者是一种通过假装自己是受信任的实体来欺骗他人来获取凭据(账号、密码等信息)的方法。 讲白话,都能听懂的就是去仿作
一个
和正规网站一样的登录页面,欺骗用户进行输入从而达到获取信息的目的! ...
人工智能
迷惑
行为大赏
另
一个
有趣的例子是人工智能翻译系统的误译。人工智能在很多领域已经展现了非常出色的表现,但是当人们发现人工智能可以被用于欺骗或
迷惑
他们时,他们可能会开始对人工智能的可信度产生怀疑。在工作中,人工智能的
迷惑
行为可能会对决策过程产生影响,例如通过对数据的操纵或扭曲,影响企业或政府的决策结果。这种影响可能表现为改变人们对人工智能的信任度、引发对技术发展的担忧、影响日常生活和工作方式,以及对社会观念的调整。为了修复这个设计缺陷,我们可以在算法中添加对输入列表是否为空的判断,并在空列表的情况下返回
一个
适当的错误提示。
在STM32F103C8上实现
一个
简单
的bootloader
在STM32F103C8上实现
一个
简单
的bootloader 最近在琢磨单片机在线更新程序的事情,查资料查到在STM32上实现
一个
bootloader比较
简单
,废话不多说,动手尝试一下。 0、项目目标 为F103C8编写
一个
bootloader工程,占用flash地址为:0x08000000~0x08001FFF,共8KB。这个bootloader能够从0x08002000处运行代码。(后期可能会对bootloader进行升级,增加从某处接收固件的功能) 1、准备硬件 硬件用的是淘宝上随处可见的F103C8
SimpleAdapter(
简单
适配器)
SimpleAdapter(
简单
适配器):这个适配器不要被名字
迷惑
,看是
简单
,但功能强大 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="mat...
C#
111,115
社区成员
642,552
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章