当前位置: 首页 > 知识库问答 >
问题:

为什么字节上的算术运算在kotlin中返回int?

端木安国
2023-03-14

考虑以下代码:

val x1: Byte = 0x00
val x2: Byte = 0x01
val x3: Byte = x1 + x2;

这会产生编译错误,因为添加2字节的结果是Int。

为了解决这个问题,我需要手动将结果转换回字节:

val x3: Byte = (x1 + x2).toByte()

这是非常反直觉的。为什么算术运算符是这样工作的?

共有1个答案

姜志行
2023-03-14

这是非常反直觉的。为什么算术运算符是这样工作的?

它也是Java语义的精确副本。Java没有字节码来添加两个字节、char或short。虽然Kotlin可能决定改变语义并发出更复杂的字节码,但与Java保持一致的选择有其优点。

类似的问题是“为什么字节是有符号类型?”答案是类似的。Kotlin旨在让有经验的Java开发人员感到熟悉。

 类似资料:
  • 我正在开发一个返回算术表达式的程序,其中包括运算符和整数。我为其实现的代码如下: 这段代码的问题是它返回运算符,但表达式中的所有运算符都是相同的:例如:我得到一个表达式9 2 3 4 5=?我不想让它全部包含,它可以是一个表达式中的许多随机运算符。任何帮助都将不胜感激。谢谢

  • 我有一个简单的程序来测量浮点乘法(和随机生成,编译g-O0)。在主机(Ubuntu 16.04)上运行时,每10000000次乘法得到约1.6秒,在图像“Ubuntu”的容器中运行时(无需重新编译),得到约3.6秒。有人能解释为什么它慢了2.5倍吗? p、 我多次运行程序来消除异常值。我不需要优化它,只需要详细解释那里发生了什么。 编译 要在构建后使用的容器内运行:

  • 这个问题基本上是说迭代一个整数,然后计算这个数是否可以被它的左边数整除,如果它可以整除,则返回一个布尔数组。 73312 第一个数字没有左边的数字,所以它是假的 我运行了测试,一切都很好,但是有了这个数字(73312),当它应该返回false时,它会返回true。 预期输出 实际输出

  • 我使用的是我的代码中有两个可观察的对象 观察值不是来自请求,而是来自 我需要根据这个逻辑将序列组合/转换成一个单一的可观察值: 如果序列,或,-需要返回新的可观察的否则需要返回 我试图使用来实现: 但问题是我的

  • 问题内容: 是否可以查询两个字段之间相减的结果? 例如,有两个字段:“开始”,“结束”。我想要带的文件。 可以直接完成此操作吗,还是唯一的方法是在加载具有这种差异的文档时创建一个新字段? 问题答案: 查询中的脚本过滤器可能是解决方法。 http://www.elasticsearch.org/guide/zh- CN/elasticsearch/reference/current/query-ds