本文介绍了所以你认为你知道运算符在c ++的优先级?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚遇到一个代码,不仅编译,但给出预期的结果(其中x是一个整数值):

  int y =(int)(0.5 * x * x + + + 0.6 * x + 1.2); 

我花了一段时间才发现会发生什么,我必须说这是一个有趣的运算符问题。没有编译程序,以下操作的结果是什么?为什么?

  int a = 1; 
int b = 2;
int z = a + + + b;
int z1 = a + - + b;
int z2 = a + - - b;
int z3 = a - - + b;
int z4 = a - - - b;
int z5 = a + -b;

我还有一个问题,标准是给出这样的结果还是编译器特定? / p>




说明:
因为+和 - 运算符之间有空格,所以+ + +不编译为++ +,而是作为一元运算符在右边成员。

  int y =(int)(0.5 * x * x + + + 0.6 * x + 1.2) 

实际上是:

  int y =(int)(0.5 * x * x + 0.6 * x + 1.2); 



这是预期结果。



  z = a + + + b = a + +(+ b)= a +(+ b)= a + b = 3; 
z1 = a + - + b = a + - (+ b)= a +(-b)= a-b =
z2 = a + - b = a + - (-b)= a +(+ b)= a + b =
z3 = a - + b = a - - (+ b)= a - (-b)= a + b =
z4 = a - - - b = a - - (-b)= a - (+ b)= a - b =
z5 = a + -b = a +(-b)= a-b = -1;


解决方案

z = 3

z1 = -1

z2 = 3

z4 = 3

z5 = -1



不编译,我会说这是一个简单的数学运算符组合

我学会了这个短语(从巴西葡萄牙语翻译):

b
$ b

  int z = a + + + b; //'+'+'+'='+',生成的'+'+'+'= +。 
int z1 = a + - + b; //'+'+' - '=' - ',结果' - '+'+'= - 。
int z2 = a + - - b; //'+'+' - '=' - ',结果' - '+' - '= +。
int z3 = a - - + b; //' - '+' - '='+',结果'+'+'+'= +。
int z4 = a - - - b; //' - '+' - '='+',结果'+'+' - '= - 。
int z5 = a + -b; // simpledifferent signals = subtract:)


I just ran into a piece of code that not only compiles, but gives the expected result (where x is an integer value):

int y = (int)(0.5 * x * x + + + 0.6 * x + 1.2);

It took me a while to figure out what happens and I must say it was an interesting operator problem. Without compiling the program, what are the results of the following operations and why?

int a = 1;
int b = 2;
int z = a + + + b;
int z1 = a + - + b;
int z2 = a + - - b;
int z3 = a - - + b;
int z4 = a - - - b;
int z5 = a +- b;

I still have one question, though: does the standard give such results or is it compiler specific?


Explanation:Because the + and - operators have spaces between them, the "+ + +" sequence is not compiled as "++ +", but as unary operators on the right member. So

int y = (int)(0.5 * x * x + + + 0.6 * x + 1.2);

actually gives:

int y = (int)(0.5 * x * x + 0.6 * x + 1.2);

which was the expected result.

So,

z  = a + + + b = a + + (+b) = a + (+b) = a + b = 3;
z1 = a + - + b = a + - (+b) = a + (-b) = a - b = -1;
z2 = a + - - b = a + - (-b) = a + (+b) = a + b = 3;
z3 = a - - + b = a - - (+b) = a - (-b) = a + b = 3;
z4 = a - - - b = a - - (-b) = a - (+b) = a - b = -1;
z5 = a +- b = a + (-b) = a - b = -1;
解决方案

z = 3
z1 = -1
z2 = 3
z4 = 3
z5 = -1

Without compiling, i'd say it's a simple math operator combining
I've learned it with this phrase (translated from Brazilian portuguese):

So

int z = a + + + b; // '+' + '+' = '+' , the resulting '+' + '+' = + again.
int z1 = a + - + b; // '+' + '-' = '-' , the resulting '-' + '+' = - again.
int z2 = a + - - b; // '+' + '-' = '-' , the resulting '-' + '-' = +.
int z3 = a - - + b; // '-' + '-' = '+' , the resulting '+' + '+' = + again.
int z4 = a - - - b; // '-' + '-' = '+' , the resulting '+' + '-' = -.
int z5 = a +- b; //simple "different signals = subtract" :)

这篇关于所以你认为你知道运算符在c ++的优先级?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 09:09