我正在使用C操作符优先级表,以更好地理解C的运算符优先级。我在理解以下代码的结果时遇到了问题:
int a, b;
a = 1;
b = a++; // does not seem to follow C operator precedence
使用C操作符的优先级表,我无法解释为什么使用后缀++运算符首先计算赋值,然后计算增量。
后缀增量运算符(++)在C中的优先级最高,而赋值运算符(=)的优先级最低。因此,在上面的代码中,首先必须执行后缀++,然后分配=。因此,两个变量a和b都应该等于2,但它们不是。
为什么C运算符优先级似乎不适用于这段代码?
什么时候后缀++的最高优先级没有显示出来
为什么在下面的示例中,后缀增量运算符(++)在赋值(=)运算符之后执行?根据,++具有比=更高的优先级,因此应该首先执行。
int a,b;
b = 2;
a = b++;
printf("%d\n",a);
将输出a= 2。
PS:原则上我知道++b和b++之间的区别,但是只要看看操作符优先级,前面的列表告诉我们一些不同的东西,即++应该在=之前执行
请问,谁能帮我弄清楚为什么在后缀之前,平等有更高的优先权?
int x = 6;
System.out.println(7 == x++);
输出:false
根据Java中运算符优先级的一些来源:后缀应该比相等运算符具有更高的优先级。在这些来源中,还提到了运算符的结合性(但它应该在表达式中运算符的优先级别相同时出现)。
public class Test1 {
public static void main(String[]args) {
int a=1;
((a++)++)++; //in this line i got a error as variable expected
System.out.println(a);
}
}
这是一个错误,请告诉我为什么会出现错误,(())是否允许。
我必须理解一些将函数的前后增量混合在一起的代码。有一件事让我很困惑。
所以我试着测试一些更小的功能。但我无法解释以下行为:
int i = 1;
i = i++ * ++i * 2;
System.out.println("i = " + i);
int x = 1;
x = ++x * x++ * 2;
System.out.println("x = " + x);
预期产出是:
i = 8
x = 8
但实际上是:
i = 6
x = 8
谁能告诉我原因吗?
我在中遇到了这个问题,并在Eclipse中尝试了一下,但我不能理解它们到底是如何计算的。
int x = 3, y = 7, z = 4;
x += x++ * x++ * x++; // gives x = 63
System.out.println(x);
y = y * y++;
System.out.println(y); // gives y = 49
z = z++ + z;
System.out.println(z); // gives z = 9
根据网站上的一条评论,x += x++ * x++ * x++解析
为什么下面的代码是非法的?
using System;
class Program
{
static void Main(string[] args) {
int i = 0;
--i++;
Console.WriteLine(i);
}
}
它给出了--i++上的以下错误:
The operand of an increment or decrement operator must be a variable, property or indexer
我知道这段代码没有实际用途;我只是好奇为什么不允许使用它。我不关心它
我不知道如果在Java中的表达式上应用增量运算符会发生什么。
int ai[] = new ai[10];
ai[0]++;
// ***
class Car {
public int yearMade = 0;
}
class Person {
public Car myCar = new Car();
}
Person p = new Person();
p.myCar.yearMade++;
可以按照第一个示例显示的方式增加数组的元素吗?
你能在类中增加一个字段(我确实知道封装和getter/setters,我的问题是面向语法的),这是我在第二个例子中所展示的方式吗?
我
在用JSF开发web应用程序时,我遇到了一个表达式,它的计算方式是我无法遵循的。让我们用简单的Java代码表示相同的表达式。
final public class Main
{
public static void main(String[] args)
{
int x=5;
int temp=10;
temp=temp + 1 + x;
System.out.println("temp = "+temp);
int var=10;
var
最近我一直在学习C和指针。
在StephenG.Kochan的C语言编程一书中,我遇到了一个很难完全理解它的例子。
若要使用指针将字符串from复制到字符串to,示例指示:
void copyString (char *to, char *from) {
while ( *from )
*to++ = *from++;
*to = '\0';
}
据我理解,*from++是*from的后增量,因此*to++的值应该仅为*from。
例如,如果
`*from` is in the position 1.
`*from++` is in p
考虑下面给出的代码段:
#include <stdio.h>
struct s
{
int x;
char c;
};
int main()
{
struct s x[2]={{1,'a'},{2,'b'}};
struct s * p;
p=x;
int a = p++ -> x; //line of doubt
printf("%d \n",a);
}
以下代码的输出为1,并清楚地表明它实际上被计算为:
int
我有两个问题。
请考虑以下代码:
int x=1,y=2;
int z =(x++)+(++y);
int w = (++x)++;
cout << z << "\t" << w << "\t" << x;
现在,这给了我4,3和4,我猜想w=3是因为这个int w = (++x)++是未定义的行为,这对我来说很好。我不明白的是:我试着像这个int w = ++x++;那样写这行int w = ++x++;,得到了error: lvalue required as increment operand,但
我被这个结果震惊了.用C语言编码已经有几年了。有人能解释一下可能的用例吗?看起来应该是编译器的警告。
#include <stdio.h>
int chk(int var)
{
return var++;
}
int main (void)
{
int a = 1;
a = chk(a);
printf("var is: %d\n", a);
return 0;
}
var is: 1
我刚刚了解到,如果返回语句包含增量操作,则返回将首先执行,值将在增量之前返回。如果我先在一个单独的语句中增加,然后返回,它就会像预期的那样工作。
private static int incrementIntV1(int a)
{
return a++;
}
private static int incrementIntV2(int a)
{
a++;
return a;
}
public static void main(String[] args)
{
int b = 6;
System.out.println("Increment in
我正在学习中的“语法”一章。
根据的说法,...++ Postfix increment的优先级高于=,甚至高于++... Prefix increment。然而,在javascript中,下面的代码似乎证明了另一种情况。
var a = 1;
var b = a++; // b = 1; a = 2;
var c = ++a; // c = 3; a = 3;
我到底搞错了什么?上面的代码不是显示= & ...++ Postfix increment比= & ++...具有更高的优先级吗
由于我们知道要区分递增前和递增后的运算符函数,我们在递增后的运算符函数中使用伪参数。但是编译器如何在内部区分这两个函数,正如我们在函数重载中所知道的,编译器通过传递的参数数量(&参数由函数接收)来区分多个函数(同名的),但在这里,我们在调用时不传递任何参数,但在函数定义的参数中,我们声明为'int‘。
class Integer
{
int x;
public:
void setData(int a)
{ x = a; }
void showData()
{ cout<<"x="<<x; }