borland turbo C++ 中奇怪的运算符优先级和赋值行为
weird operator precedence and assignment behavior in borland turboC++
我必须在大学里使用 borland TurboC++
进行 C 编程。
他们说我们的考试委员会推荐它。我有使用它。。
问题是他们给了这个运算符优先级相关的问题:
int a=10,b=20,result;
result1 = ++a + b-- - a++ * b++ + a * ++b;
printf("result=%d",);
printf("\n a=%d",a);
printf("\n b=%d",b);
其他编译器如gcc
无法执行此操作。但是 turbo C
可以并且给我们:
result=32
a=12
b=21
我测试有误。我的老师试图解释发生了什么。但我不相信。它是 turbo C
的某种奇怪行为,还是在过去它对所有编译器都完全没问题。如果是这样,了解发生了什么以及如何理解的步骤是什么。
为了解决这类问题,turbo-c 的处理方式如下:
1) 考虑使用变量的初值
a=10
b=20
2) 计算每个变量的所有预递增和递减,并将每个变量的所有 post 单独存储在堆栈中。
对于变量 a
pre increment = 1 therefore change the value of a to 11
post = 1 stored to stack
对于变量 b
pre increment = 1 therefore change the value of b to 21
post = 2 stored to stack
3) 现在将所有的pre和post替换为a和b的当前值
result = 11 + 21 - 11 * 21 + 11 * 21 ;
result = 11 + 21;
result = 32;
4) 最后出栈,对变量进行操作
a = 12
b = 21
这是解决这个问题的唯一方法。您可以用任何同类问题检查程序。结果会一样。 g++ 无法解决,因为它可能无法以相同的方式解决变量,因此出现了优先级错误。它可能会因 ++ + 和 -- - 而失败,因为它无法理解递增或递减运算符并形成歧义树。
我必须在大学里使用 borland TurboC++
进行 C 编程。
他们说我们的考试委员会推荐它。我有使用它。。
问题是他们给了这个运算符优先级相关的问题:
int a=10,b=20,result;
result1 = ++a + b-- - a++ * b++ + a * ++b;
printf("result=%d",);
printf("\n a=%d",a);
printf("\n b=%d",b);
其他编译器如gcc
无法执行此操作。但是 turbo C
可以并且给我们:
result=32
a=12
b=21
我测试有误。我的老师试图解释发生了什么。但我不相信。它是 turbo C
的某种奇怪行为,还是在过去它对所有编译器都完全没问题。如果是这样,了解发生了什么以及如何理解的步骤是什么。
为了解决这类问题,turbo-c 的处理方式如下:
1) 考虑使用变量的初值
a=10
b=20
2) 计算每个变量的所有预递增和递减,并将每个变量的所有 post 单独存储在堆栈中。
对于变量 a
pre increment = 1 therefore change the value of a to 11
post = 1 stored to stack
对于变量 b
pre increment = 1 therefore change the value of b to 21
post = 2 stored to stack
3) 现在将所有的pre和post替换为a和b的当前值
result = 11 + 21 - 11 * 21 + 11 * 21 ;
result = 11 + 21;
result = 32;
4) 最后出栈,对变量进行操作
a = 12
b = 21
这是解决这个问题的唯一方法。您可以用任何同类问题检查程序。结果会一样。 g++ 无法解决,因为它可能无法以相同的方式解决变量,因此出现了优先级错误。它可能会因 ++ + 和 -- - 而失败,因为它无法理解递增或递减运算符并形成歧义树。