c# – 为什么有赋值运算符(&=,=)但没有非赋值运算符(&,)用于短基元?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 为什么有赋值运算符(&=,=)但没有非赋值运算符(&,)用于短基元?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1308字,纯文字阅读大概需要2分钟。
内容图文
![c# – 为什么有赋值运算符(&=,=)但没有非赋值运算符(&,)用于短基元?](/upload/InfoBanner/zyjiaocheng/787/b769f7b76e6f40048294716f5f8833e5.jpg)
参见英文答案 > Integer summing blues, short += short problem 5个
我偶然发现在小于32位的基本类型上不允许按位或算术运算的行为,但事实上允许相应的赋值操作:
short BitwiseAnd(short a, short b) { return a & b; } // error
short BitwiseAndAssignment(ref short a, short b) { a &= b; } // works
short Add(short a, short b) { return a + b; } // error
short AddAssignment(ref short a, short b) { a += b; } // works
对于其他短基本类型(如byte,sbyte和ushort),同样的行为也适用.
我知道算术和逻辑运算是针对32位和更大的类型(int,long …)定义的,因为它是处理器提供的(see this question),更短的类型被加宽并且可以返回到8位或16位.但是,为什么这可以在赋值运算符中起作用?首先我假设在幕后,短路被转换为int,但是你会有一个赋值/返回值short value =(some int),这会产生错误,因为强制转换不是隐含的.
另外一点:我在Visual Studio的即时窗口中尝试了一些代码,但是在那里,还有更多代码可以工作.即时窗口可能会执行一些隐式转换,这通常是明确的.例如,短a =(int)5;允许在即时窗口中.所以这没有帮助.
解决方法:
However, is there a reason why this would work in an assignment operator?
是的:因为否则赋值运算符永远不能用于这些类型 – 没有语法允许它工作. a = b或a& = b的期望是明确的,因此转换是自动执行的.
使用b或a& b,正如您已经注意到的那样:出于性能原因,这种情况已经扩大;语法存在将其放回去,特别是(短)(a b)等.
内容总结
以上是互联网集市为您收集整理的c# – 为什么有赋值运算符(&=,=)但没有非赋值运算符(&,)用于短基元?全部内容,希望文章能够帮你解决c# – 为什么有赋值运算符(&=,=)但没有非赋值运算符(&,)用于短基元?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。