整数求和布鲁斯,短+=短问题

2024-04-10

C# 程序:

short a, b;
a = 10;
b = 10;
a = a + b; // Error : Cannot implicitly convert type 'int' to 'short'.

// we can also write this code by using Arithmetic Assignment Operator as given below

a += b; // But this is running successfully, why?

Console.Write(a);

这里有两个问题。第一个是“为什么short加short结果是int?”

好吧,假设短加短是短,看看会发生什么:

short[] prices = { 10000, 15000, 11000 };
short average = (prices[0] + prices[1] + prices[2]) / 3;

当然,如果在短裤中进行此计算,则平均值为 -9845。总和大于可能的最大短路值,因此它会转为负数,然后除以负数。

在整数算术环绕的世界中,在 int 中进行所有计算更为明智,这种类型可能有足够的范围来保证典型计算不会溢出。

第二个问题是:

  • 短加短就是 int
  • 将 int 分配给 Short 是非法的
  • a +=b 与 a = a + b 相同
  • 因此短+=短应该是非法的
  • 那么为什么这是合法的呢?

该问题的前提不正确;上面第三行是错误的。 C# 规范在第 7.17.2 节中说明

否则,如果所选运算符是 预定义的运算符,如果返回 所选运算符的类型是 显式转换为类型 x,并且如果 y 是隐式可转换的 x 的类型或运算符是 a 移位运算符,则运算为 计算为 x = (T)(x op y),其中 T 是 x 的类型,除了 x 是 仅评价一次。

编译器代表您插入强制转换。正确的推理是:

  • 短加短就是 int
  • 将 int 分配给 Short 是非法的
  • s1 += s2 与 s1 = (short)(s1 + s2) 相同
  • 因此这应该是合法的

如果它没有为您插入强制转换,那么就不可能在许多类型上使用复合赋值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整数求和布鲁斯,短+=短问题 的相关文章

随机推荐

  • android ndk 未定义对方法的引用

    您好 很抱歉这篇长文章我正在尝试编译一些静态类 即 jsmn c json c 和 buf c 它们是我从下载的 jsmn json 库的一部分https github com alisdair jsmn example downloads
  • 如何使用spark-submit为Spark作业选择队列?

    有没有办法提供参数或设置来选择我希望运行 Spark submit 作业的队列 通过使用 queue 因此 火花提交作业的一个示例是 Spark submit master YARN conf Spark executor memory 4
  • Dash 数据表下载至 Excel

    我目前正在使用下面的脚本从我创建的破折号下载数据表 下载工作正常 但是当我在本地托管 Dash 并尝试通过另一个系统单击下载按钮时 文件正在主机上下载 而不是在用户计算机上下载 如果我的问题看起来很愚蠢 我深表歉意 因为我对 Dash 和
  • scala 中可以有命名常量吗?

    看起来 Java 中的注释需要常量 我想做 object ConfigStatics final val componentsToScan Array com example PropertySource ConfigStatics com
  • 由于 lambda 表达式,缩小失败

    当 ASP NET 捆绑程序尝试缩小以下脚本时 它会失败 Minification failed Returning unminified contents 164 59 60 run time error JS1195 Expected
  • 为什么改变 SO_RCVBUF 的值不起作用?

    我正在制作一个程序 它创建一个原始套接字以读取所有流量 在调用socket 和recvfrom 之间 最后一个在循环中从缓冲区中取出所有数据包 我等待了5秒 当我运行该程序时 我使用 hping3 命令以 更快的模式 以快速填充缓冲区 向我
  • ASP.Net MVC Ajax.BeginForm OnComplete 在 Razor 视图中传递 C# 参数

    我在 MVC c Razor 视图中有以下代码 string url Projects MonthRangesScriptsPartial using Ajax BeginForm MonthRanges Projects new id V
  • SQL Server 的 SELECT JOIN 语句导致的死锁

    当执行带有两个表的 JOIN 的 SELECT 语句时 SQL Server 似乎 分别锁定语句的两个表 例如通过像这样的查询 这 SELECT FROM table1 LEFT JOIN table2 ON table1 id table
  • 求 O(log n) 中值

    问题是我们如何找到整数值接收流的中位数 例如 对于 12 14 252 243 15 中位数是 15 O log N 其中 N 是值的数量 请注意 我们有一个整数值流 因此通过接收每个值 我们必须重新找到中位数 例子 Input media
  • 如何修复 Nodejs 中的“无法读取未定义的属性推送”错误?

    我编写了一个简单的应用程序来学习 Nodejs 但是当我在 cmd 中运行 nodemon index js 时出现此错误 类型错误 无法读取未定义的属性 push 应用程序崩溃 启动前等待文件更改 我已遵循 udemy 课程中的所有说明来
  • C 可变长度数组存储持续时间

    On this http en cppreference com w c language storage duration网站上有以下段落 强调我的 自动存储时间 当进入声明对象的块时分配存储空间 并在通过任何方式 goto return
  • 从 PHP 中检索 Javascript 中的 JSON 数组

    我试图从 PHP 返回一个 json 编码的数组到 JS 我之前已经这样做过很多次了 但现在我遇到了一个奇怪的错误 我成功获取数据并且它在 chrome 中显示数组 但是 如果我指定了 我无法让它进入AJAX成功功能dataType jso
  • 何时使用字节数组&何时使用字节缓冲区?

    字节数组和字节缓冲区有什么区别 另外 在什么情况下应该优先选择其中之一 我的用例是用 java 开发的 Web 应用程序 实际上有多种处理字节的方法 我同意 选择最好的并不总是那么容易 the byte the java nio ByteB
  • EnterpriseLibrary.Logging 写入相差 1 小时的日志

    我们在日志记录方面遇到了一个奇怪的问题 我们正在使用Microsoft Practices EnterpriseLibrary Logging用于登录我们的 Web 应用程序的库 问题是它写入的日志与当前系统时间有 1 小时的差异 我们的记
  • Apache Geode CacheServerException 在密钥集请求期间未找到区域

    我是 Geode 新手 并且已经开始默认locator and server根据5 分钟内的晶洞 https cwiki apache org confluence display GEODE Index Index Geodein5min
  • 如何在 Eclipse 中找到方法实现的用法?

    当我想在java中找到普通方法的用法时 这是相当简单和直接的CTRL SHIFT G 但是如果这个方法有一个super定义 实现 Eclipse 将向我展示层次结构类型中所有类型的用法 例如 如果我有一个toString 方法在我的类中 我
  • 将 ViewChild 用于动态元素 - Angular 2 和 ionic 2

    我想使用多个离子载玻片 https ionicframework com docs api components slides Slides 我动态添加的 但我不能使用 viewChild 请提出解决此问题的方法 模板 html div d
  • 如何使用 My.Settings.Save Visual Basic 保存窗体背景图像

    我正在尝试用 Visual Basic 创建一个操作系统 当然是基于程序的 它需要个性化 我希望用户能够从存储在项目资源中的一组选定图像中进行选择 并且我希望保存该图像 以便他们下次登录软件时 表单具有相同的他们选择保存的图像 额外的信息
  • python中的IOE错误“没有这样的文件或目录”

    我正在编写一个 Django 项目 涉及从表中检索数据 我有一个模块 它具有检索一些数据的行 snp data txt是模块同一目录中的文件 data file snp data txt 当我在 django 项目之外单独调用该模块时 该模
  • 整数求和布鲁斯,短+=短问题

    C 程序 short a b a 10 b 10 a a b Error Cannot implicitly convert type int to short we can also write this code by using Ar