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

无法使用表达式但使用增量运算符递增字节值[重复]

通远
2023-03-14
byte i=0;
i++;
byte i=0;
i=i+1;

我知道在I+1的情况下,整个值显式地增加了1(这将是int值),因此会出现编译问题,但在I++的情况下,它也会这样做,但没有得到任何错误。

共有1个答案

滕无尘
2023-03-14

每当在两个不同类型的操作数之间执行二进制运算时,其中一个操作数将提升为更高的类型。然后运算的结果就是那种类型的。

因此,在您的示例中,字节类型a首先被提升为int,因为1int类型。然后在加法操作之后,结果类型为int。现在,由于不能将int分配给byte,因此需要进行类型转换以删除编译器错误:

byte a = 2;
a = a + 1;   // Error: Cannot assign an int value to byte
a = (byte)(a + 1);  // OK

现在,在复合赋值运算符的情况下,类型转换是隐式地为您完成的。表达式:

a += 1
a = (byte)(a + 1);

形式为E1 op=E2的复合赋值表达式等价于E1=(T)((E1)op(E2)),其中T是E1的类型,只不过E1只计算一次。

前缀增量运算符和后缀增量运算符的情况类似。

根据JLS-§15.15一元运算符:

 类似资料:
  • C++ 重载运算符和重载函数 递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符。 下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( -- )。#include <iostream> using namespace std; class Time { private: int hours; // 0 到

  • 问题内容: 为什么当我在做时它起作用,但是当我在做时: 它不起作用? 为什么,以及如何解决? 完整代码: 但是这段代码可以正常工作: JSFiddle:https ://jsfiddle.net/69z2wepo/55100/ 问题答案: 这样一来,您就可以改变状态,因为它和做是同一件事。您永远不要改变状态(请参阅https://facebook.github.io/react/docs/comp

  • 问题内容: 我对post 和pre 运算符感到困惑,例如以下代码 会打印10吗? 它打印10,但我希望它应该打印11 但是当我这样做 它会按照我的预期输出11,所以为什么x = x ++; 不会改变x的值? 问题答案: 否,正确的打印输出为10。理解结果背后原因的关键是预分配和后分配复合分配之间的差异。当使用预增量时,表达式的值在执行增量后获取。但是,当您使用后递增时,表达式的值 在 递增 之前

  • 考虑以下片段: 在\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\一切工作完美,我得到打印出来的屏幕。 在中,我做了完全相同的操作,希望从参数包中读取。然而,我明白了 我做错了什么?人们会认为事情会完全一样,我只是替换了操作

  • 增量运算符++将1添加到其操作数,减量运算符 - 从其操作数中减去1。 因此 - x = x+1; is the same as x++; 同样 - x = x-1; is the same as x--; 递增和递减运算符都可以在操作数之前(前缀)或后跟(后缀)。 例如 - x = x+1; can be written as ++x; // prefix form 或者 - x++; /