Precedenţa şi asociativitatea operatorilor
Limbajul C este unul dintre cele mai complexe limbaje când vine vorba de precedenţa operatorilor. Exista 15 de nivele diferite de precendenţă .
Precendenţa se referă la ordinea de evaluare a expresiilor şi depinde de doua lucruri:
– Operatorii au nivele de precendeţă diferite.
– Operatorii au asociativitate diferită de stânga sau de dreapta.
Operator | Associativity |
( ) [ ] -> . ++’postfix’ –’postfix’ | Left |
! ˜ ++ — + – (type) * & sizeof | Right |
* / % | Left |
+’binary’ -’binary’ | Left |
<< >> | Left |
< <= > >= | Left |
== != | Left |
& | Left |
ˆ | Left |
| | Left |
&& | Left |
|| | Left |
?: | Right |
assignments | Right |
, | Left |
Exemplu:
<br />#include "stdio.h" /* printf */<br />#include "string.h" /* strcat */<br />#include "stdlib.h" /* strtol */<br /><br />unsigned char *p;<br />unsigned char *ps;<br />unsigned char a;<br />unsigned char b;<br />unsigned char c;<br /><br />unsigned char x;<br />unsigned char y;<br />unsigned char z;<br />typedef struct<br />{<br /> unsigned char h;<br /> unsigned short r;<br />} ms;<br />ms *m;<br />unsigned char result;<br />unsigned char temp;<br />unsigned char flag;<br />unsigned char low;<br />unsigned char high;<br /><br />const char *byte_to_binary(int x)<br />{<br /> static char b[9];<br /> b[0] = '